ActionBar PopupMenu 主题设置

版权声明:本文为博主原创,未经允许,禁止转载。原文: https://blog.csdn.net/smile_Running/article/details/87898007

目    录

介绍

创建 menu 资源文件

关联活动,绑定事件

 修改样式


©本文由博主原创,未经允许,不得转载相关博文内容


  • 介绍

    在 android 中经常看到可以点击一个按钮跳出一个类似对话框的界面,在这个界面里可以存放一些菜单选项并且可以赋予点击事件。现在来看一个这样的菜单效果,如 Actionbar 的 menu 菜单,点击 menu 按钮可以弹出更多的子选项按钮,效果图如下:

  • 创建 menu 资源文件

    如上图的效果,在 activity 中已经提供了这样的一个方法可以创建选项菜单,这个方法为:onCreateOptionMenu(Menu menu);我们只需要在 activity 里面重写此方法即可实现上图的效果。

    首先,我们需要在 res 资源文件夹下新建一个 menu 的文件夹,此文件夹下即存放 xml 文件的目录,我们新建一个 option.xml,

    然后在其中写入需要的 item 资源,这里必须要写入两个属性,一个是:id,一个是:title

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_1"
        android:title="menu one" />
    <item
        android:id="@+id/menu_2"
        android:title="menu_two" />
    <item
        android:id="@+id/menu_3"
        android:title="menu_three" />
</menu>
  • 关联活动,绑定事件

    然后在 activity 中重写 onCreateOptionMenu 方法,加载我们刚刚的 option.xml 文件,然后要返回一个 true ,表示启用菜单:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.options, menu);
        return true;
    }

    重新运行一下,然后你就会看到菜单效果了。

    光是有菜单不行,我们应该给予它每一个子选项的点击事件,这个 activity 也已经有了,我们只需要重写 onOptionsItemSelected(MenuItem item);方法就可以绑定点击事件了,与 Button 的绑定事件类似。

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_1:
                Toast.makeText(this,"option 1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_2:
                Toast.makeText(this,"option 2",Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_3:
                Toast.makeText(this,"option 3",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;

        }
        return super.onOptionsItemSelected(item);
    }

    到此为止,我们的 menu 就算是完成了,算是非常简单。但是有一个问题,我发现 menu 跑到了 actionbar 的上方去了,也就是说把 actionbar 给挡住了,这样显得不那么美观,所以我们就要想办法让它下来一点,让它显示到 actionbar 下方,比如这个样子的效果:

  •  修改样式

   这样子看起来效果不错,至少不会把 actionbar 给挡住了。为了实现这样的效果,我们就要去自定义它的一个主题,这个主题名字叫做:actionbarOverflowMenuStyle 。

    我们在 appTheme 下加入这个 item ,name = actionbarOverflowMenuStyle , 这里的 name 不可以写别的,否则将会报异常:not found,所以我们的 styles.xml 代码如下:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!--suppress AndroidDomInspection -->
        <item name="actionOverflowMenuStyle">@style/AppOverflowMenuStyle</item>
    </style>

    <style name="AppOverflowMenuStyle" parent="Base.Widget.AppCompat.Light.PopupMenu.Overflow">
        <!-- 不让它覆盖 actionbar -->
        <item name="overlapAnchor">false</item>
        <!-- 设置弹出的背景颜色 -->
        <item name="android:popupBackground">#f33333</item>
    </style>
</resources>

    修改后的结果:

©原文链接:https://blog.csdn.net/smile_Running/article/details/87898007

©作者博客 ID:smile_running

猜你喜欢

转载自blog.csdn.net/smile_Running/article/details/87898007