继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android学习(八)—— Android菜单

HUX布斯
关注TA
已关注
手记 324
粉丝 84
获赞 378

Android  菜单

我们继续来进行学习,今天写一下在软件中用的还算较多的菜单。

1、Menu

菜单,很显然,作用就是点击不同的选项触发不同的方法。现在在安卓使用中推荐使用ActionBar,但这里我们还是对菜单进行一个简单的解释。

菜单主要分为三类,选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu),下面我们就一个一个来看一下。

(1)选项菜单

当用户单击软件上的菜单按钮,触发事件弹出的菜单框就是选项菜单。

这是效果图

先是布局代码

布局为在res文件夹下新建一个menu文件夹,在此文件夹下建xml文件。

复制代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" 3     xmlns:app="http://schemas.android.com/apk/res-auto"> 4     <item 5         android:id="@+id/mune_enter" 6         android:orderInCategory="100" 7         android:title="选项一" 8         app:showAsAction="never"/> 9     <item10         android:id="@+id/mune_setting"11         android:orderInCategory="100"12         android:title="选项二"13         app:showAsAction="never"/>14     <item15         android:id="@+id/mune_out"16         android:orderInCategory="100"17         android:title="选项三"18         app:showAsAction="never"/>19 </menu>

复制代码

解释一下其中一些属性

  • showAsAction 主要是针对这个菜单的显示起作用的,它有三个可选项

  1. always:总是显示在界面上

  2. never:不显示在界面上,只让出现在右边的三个点中

  3. ifRoom:如果有位置才显示,不然就出现在右边的三个点中

下面是java代码

复制代码

public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }    //导入菜单布局
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);        return true;
    }    //这里是点击菜单项的触发事件
    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.mune_enter:
                Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();                break;            case R.id.mune_setting:
                Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show();                break;            case R.id.mune_out:
                Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();                break;            default:                break;
        }        return super.onOptionsItemSelected(item);
    }

}

复制代码

(2)上下文菜单

 当用户长按Activity页面时,弹出的菜单被称为上下文菜单。一般情况下ContextMenu常用于ListView或者GridView。

效果图

先是布局文件

这里的布局就是下载layout中,父布局为FrameLayout

复制代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:id="@+id/container" 4     android:layout_width="match_parent" 5     android:layout_height="match_parent"> 6  7     <ListView 8         android:id="@+id/mune_list" 9         android:layout_width="wrap_content"10         android:layout_height="wrap_content" >11     </ListView>12 13 </FrameLayout>

复制代码

这里没什么要说的,直接看下面。

java代码

复制代码

public class MainActivity extends AppCompatActivity {    private ListView listview;

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        //加载数据        showListView();        // 注册上下文菜单
        this.registerForContextMenu(listview);
    }    //加载数据
    private void showListView() {
        listview = (ListView) findViewById(R.id.mune_list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, getDate());
        listview.setAdapter(adapter);
    }    //创建数据源
    private ArrayList<String> getDate() {
        ArrayList<String> list = new ArrayList<String>();        for (int i = 0; i < 10; i++) {
            list.add("菜单" + i);
        }        return list;
    }    //添加上下文菜单的菜单项
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("上下文菜单");        //加载上下文菜单内容
        menu.add(1, 1, 1, "选项一");
        menu.add(1, 2, 1, "选项二");
        menu.add(1, 3, 1, "选项三");        super.onCreateContextMenu(menu, v, menuInfo);
    }    //创建单击事件
    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()) {            case 1:
                Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();                break;            case 2:
                Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show();                break;            case 3:
                Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();                break;            default:                break;
        }        return super.onContextItemSelected(item);
    }
}

复制代码

 (3)子菜单

它就是将功能相同的操作进行分组显示,作用在选项菜单上,是选项菜单的二级菜单

效果图

先上布局文件

其实布局文件中可以什么都没有

复制代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:id="@+id/container" 4     android:layout_width="match_parent" 5     android:layout_height="match_parent"> 6  7     <TextView 8         android:layout_width="wrap_content" 9         android:layout_height="wrap_content"10         android:text="SubMenu"11         android:textSize="20dp" />12 13 </FrameLayout>

复制代码

然后是java代码

复制代码

 1 public class MainActivity extends AppCompatActivity { 2  3     @Override 4     protected void onCreate(Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         setContentView(R.layout.activity_main); 7     } 8     @Override 9     public boolean onCreateOptionsMenu(Menu menu) {10         SubMenu fileMenu = menu.addSubMenu("查看");11         SubMenu editMenu = menu.addSubMenu("输入");12         //添加菜单项13         fileMenu.add(1, 1, 1, "查看1");14         fileMenu.add(1, 2, 1, "查看2");15         fileMenu.add(1, 3, 1, "查看3");16         editMenu.add(2, 1, 1, "输入1");17         editMenu.add(2, 2, 1, "输入2");18         editMenu.add(2, 3, 1, "输入3");19         return super.onCreateOptionsMenu(menu);20     }21     //创建点击事件22     public boolean onOptionsItemSelected(MenuItem item) {23         if (item.getGroupId() == 1) {24             switch (item.getItemId()) {25                 case 1:26                     Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();27                     break;28                 case 2:29                     Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();30                     break;31                 case 3:32                     Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();33                     break;34                 default:35                     break;36             }37         } else if (item.getGroupId() == 2) {38             switch (item.getItemId()) {39                 case 1:40                     Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();41                     break;42                 case 2:43                     Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();44                     break;45                 case 3:46                     Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();47                     break;48                 default:49                     break;50             }51         }52         return super.onOptionsItemSelected(item);53     }54 }

复制代码

 

上面就是菜单的用法了。。。。。。。

说一下ContextMenu与OptionMenu的区别:

  • 1、OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;

  • 2、ContextMenu对应的是view,每个view都可以设置上下文菜单;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

原文出处:https://www.cnblogs.com/QY-admin/p/9974575.html  

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP