Androidメニューはまとめを使用


1.メニュー:-システムメニュー--onCreateOptionsMenu-onOptionsItemSelected--システムメニューにアイコンを追加-コンテキストメニュー:UIビューベース--1.UIビューのコンテキストメニューを登録する:ビューに時間がかかると、コンテキストメニュー-2が作成されます.書き換えonCreateContextMenu()—-3.onContextItemSelected()を書き換える–ポップアップメニュー(3.0が表示されます)--カスタムPopupMenu--メニューにメニュー項目を追加
1)システムメニューの作成
//menu             
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        setIconEnable(menu,true);//        
        //       
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    //                 
    //item             
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO       
        switch(item.getItemId())
        {
        case R.id.action_settings:
            startActivity(new Intent(Settings.ACTION_SETTINGS));
            break;
        case R.id.action_add:
            textView.setTextSize(textView.getTextSize()+5);
            break;
        case R.id.action_sub:
            textView.setTextSize(textView.getTextSize()-5);
            break;
        }
        return super.onOptionsItemSelected(item);
    }

各オプションにアイコンを追加するには、次の方法を呼び出す必要があります.
//           
    //enable true ,        ,enable false   。4.0+       
        private void setIconEnable(Menu menu, boolean enable)  
        {  
            try   
            {  
                Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");  
                Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);  
                m.setAccessible(true); 
                //MenuBuilder  Menu  ,     ,    menu    MenuBuilder  (java     ) 
                m.invoke(menu, enable);  

            } catch (Exception e)   
            {  
                e.printStackTrace();  
            }  
        }  

2)コンテキストメニューの作成
 --            ,           ;
    //1: UI         --  textView             
registerForContextMenu(textView);

//2:       
    //view       UI  
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO        
        getMenuInflater().inflate(R.menu.main, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

//3:                
    @Override
    public boolean onContextItemSelected(MenuItem item) {
......
}

3)PopupMenu:ポップアップメニュー、3.0から出てくるのでapiは最低11、//2番目のパラメータはポップアップメニュー表示の参照位置で、通常はリファレンスビューの下に//ポップアップメニューオブジェクトを作成する
    public void btnClick(View v)
    {
        PopupMenu  pop = new PopupMenu(this, v);//                ,       
        //        
        getMenuInflater().inflate(R.menu.main, pop.getMenu());  
        //          
        pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {          
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch(item.getItemId())
                {
                    case R.id.action_add:
                        fontSize+=5;
                        textView.setTextSize(fontSize);
                        break;
                    case R.id.action_sub:
                        fontSize-=5;
                        textView.setTextSize(fontSize);
                        break;
                    case R.id.action_background:
                        int red = (int)(Math.random()*256);
                        int green = (int)(Math.random()*256);
                        int blue = (int)(Math.random()*256);
                        textView.setBackgroundColor(Color.rgb(red, green, blue));
                        break;
                }
                return false;
            }
        });     
        //    
        pop.show();
}

4)ListView表示メニューを長押しする:listViewの項目を長押しする、コンテキストメニュー実装を表示する1:listViewにOnCreateContextMenuListenerインタフェースを実装させる、
    1)
listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                menu.add(0, 0, 0, "  ");
                menu.add(0, 1, 0, "  ");
                menu.add(0, 2, 0, "  ");
                menu.setQwertyMode(true);

            }
        });
2@Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
                .getMenuInfo();
        int position = menuInfo.position;//menuInfo          
        Log.i("--", "position :" + position);
        switch (item.getItemId()) {
        case 0:
            Toast.makeText(this, "  ", 0).show();
            break;
        case 1:
            Toast.makeText(this, "  ", 0).show();
            break;
        case 2:
            Toast.makeText(this, "  ", 0).show();
            break;
        default:
            break;
        }

        return super.onContextItemSelected(item);
    }

実装2:コンテキストメニューをlistViewに登録させます.
//       
registerForContextMenu(listView);
@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        AdapterContextMenuInfo acm = (AdapterContextMenuInfo) menuInfo;
        //        listView      
        currentItemPostion = acm.position;
        getMenuInflater().inflate(R.menu.main, menu);
    }

ソースコード