您的位置:首页 > 其它

day4.09总结_Menu 菜单

2016-05-04 00:36 411 查看

(1)选项菜单 (Option Menu):

通常会结合actionBar使用

1)onCreateOptionsMenu (此方法中创建菜单)

2)onOptionsItemSelected(此方法中处理菜单的点击操作)

例子1:菜单的初始化——监听器

public class MainActivity extends Activity {

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

         /**此方法会在父类的onCreate方法中进行回调,用于创建

          * 一些选项菜单*/

         @Override

         public boolean onCreateOptionsMenu(Menu menu) {

        

                   getMenuInflater().inflate(R.menu.main,menu);   
初始化一个菜单


                   //可选:获得item

                   MenuItem item=menu.findItem(R.id.item00);

                   SearchView sv=(SearchView)item.getActionView();   
获取搜索框view


                   //sv.setOnQueryTextListener(listener)             
 添加监听器


                   return true;

         }

         /**监听选项菜单的item的点击事件*/

         @Override

         public boolean onOptionsItemSelected(MenuItem item) {

                   int id=item.getItemId();          
获取菜单项的ID

                   if(id==R.id.item02){

                     //Toast.makeText(this, "拨号", 1).show();

                     Intent intent=new Intent(Intent.ACTION_CALL);  
跳转到打电话页面


                     intent.setData(Uri.parse("tel:010"));
拨打的号码 


                     startActivity(intent);        

                   }else if(id==R.id.item03){

                   }

                   return true;

         }

}

设置权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

 

(2)上下文菜单 (Context Menu):

基于某个view的长按事件

1)创建:onCreateContextMenu

2)注册(在view上注册):registerForContextMenu

3)监听:onContextItemSelected

例子2:长按删除选项

public class MainActivity extends ListActivity {

 

         private List<String> list;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   //setContentView(R.layout.activity_main);

             list=new ArrayList<String>();

             list.add("A");list.add("B");list.add("C");

setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));

              //在listview上注册上下文菜单

                   registerForContextMenu(getListView());

         }

         /**当长按注册了上下文菜单的view对象时就会执行此方法*/

         @Override

         public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo) {

                     //1.基于xml方式

                   getMenuInflater().inflate(R.menu.context_main_1, menu);

                     //2.基于java方式

                   //menu.add(groupId, itemId, order, title)

             //SubMenu sm= menu.addSubMenu(groupId, itemId, order, title)

             //sm.add(groupId, itemId, order, title)

         }

         @Override

         public boolean onContextItemSelected(MenuItem item) {

                   //获得菜单项相关信息

                   AdapterContextMenuInfo c=(AdapterContextMenuInfo)item.getMenuInfo();

                   Log.i("TAG", "c="+c);

                   //获得长按的item位置

                   int pos=c.position;

                   if(item.getItemId()==R.id.delete){

                   Toast.makeText(this, "删除", 1).show();

                  

                   //删除内存数据

                   list.remove(pos);

                   //通知更新

                   ((ArrayAdapter<?>)

                    getListAdapter())//ListAdapter(接口)

                   .notifyDataSetChanged();

                   }

                   return super.onContextItemSelected(item);

         }

}

 

例子3:java方式创建菜单

         public boolean onCreateOptionsMenu(Menu menu) {

                   // Inflate the menu; this adds items to the action bar if it is present.

                   //getMenuInflater().inflate(menuRes, menu)

                 

                   MenuItem item01=menu.add(1, 100, 200, "item01");  保证第二项的ID不相同

                   item01.setIcon(android.R.drawable.ic_menu_add);

                   item01.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

                  

                   MenuItem item02=m
4000
enu.add(1, 101, 201, "item02");

                   item02.setIcon(android.R.drawable.ic_menu_close_clear_cancel);

                   item02.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

                  

                   MenuItem item03=menu.add(1, 102, 201, "item02");

                   item03.setIcon(android.R.drawable.ic_menu_search);

                  item03.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

                   item03.setActionView(new SearchView(this));

                  

                   //menu.addSubMenu(groupId, itemId, order, title)

                   return true;

         }

 

 

 

(3)弹出式菜单 (Popu Menu):

基于某个view的点击事件

例子4:弹出式菜单

public class MainActivity extends Activity {

        

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

    public void onClick(final View v){

             //1.构建一个PopuMenu对象,并将此对象注册到一个view上

             PopupMenu pm=new PopupMenu(this, v);

             //2.构建菜单项对象

             /*pm.getMenuInflater()

             .inflate(R.menu.main,

             pm.getMenu());*/

             pm.getMenu().add(1, 1,100, "A");

             pm.getMenu().add(1, 2,101, "B");

             pm.getMenu().add(1, 3,102, "C");

             //添加监听器

             pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                            @Override

                            public boolean onMenuItemClick(MenuItem item) {

                                     ((Button)v).setText(item.getTitle());       
获取选项的文本

                                     return true;

                            }

                   });

             //3.显示菜单

             pm.show();

    }

}

(4).子菜单(以上每种菜单都可以创建子菜单)

 

例子5:子菜单

    <item

        android:id="@+id/action_settings"

        android:orderInCategory="100"

        android:showAsAction="always"

        android:title="@string/action_settings"

        android:icon="@android:drawable/ic_menu_set_as">

       

        <menu>

            <item android:id="@+id/item01"

                android:orderInCategory="200"

                android:showAsAction="never"

                android:title="item01"/>

            <item android:id="@+id/item02"

                android:orderInCategory="201"

                android:showAsAction="never"

                android:title="item01"/>

        </menu>

    </item>

例子6:实现菜单的分组(便于统一显示或隐藏)

public class MainActivity extends Activity {

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

         private Menu optionMenu;

         @Override

         public boolean onCreateOptionsMenu(Menu menu) {

              // Inflate the menu; this adds items to the action bar if it is present.

                   getMenuInflater().inflate(R.menu.main, menu);

                   this.optionMenu=menu;

                   return true;

         }

         boolean flag=true;

         public void onClick(View v){

                   if(flag){

                            flag=false;

                   }else{

                            flag=true;

                   }

                   optionMenu.setGroupVisible(R.id.group01,flag);参数一:菜单组

参数二:隐藏(false)或显示(true)

         }

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: