美文网首页
optionMenu Toolbar contextMenu

optionMenu Toolbar contextMenu

作者: NullPoint3Exce | 来源:发表于2019-06-20 10:37 被阅读0次

OptionMenu简单使用

1.actviity里重写方法

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


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_1:
                Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
                break;
            case R.id.menu_2:
                Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
                break;
            case R.id.menu_3:
                Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
                break;
        }
        return super.onOptionsItemSelected(item);
    }

2.添加menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--android:icon:这个属性是指定每个菜单项左边的图标的-->
    <!--android:id:菜单项的唯一标识-->
    <!--android:orderInCategory:菜单项的优先级,值越大优先级越低,只能设置大于正整数-->
    <!--android:title:菜单描述,也就是菜单文字-->
    <!--app:showAsAction:这个是控制菜单项的显示的
always:让所有菜单项都会显示在toolbar上 
ifRoom:如果toolbar上还有空间的话就会显示优先级高的菜单项在toolbar上,剩下的才显示在弹出的列表中 
never:永远不会显示在Toolbar上,只会在溢出列表中出现
withText:示意actionBar显示文本标题,但是如果图标有效,且受到actionBar空间限制,文本标题可能显示不全。
collapseActinView:折叠视图
-->

    <item
        android:id="@+id/menu_1"
        android:icon="@drawable/home_highlight"
        android:title="设置"
        app:showAsAction="always" />

    <item
        android:id="@+id/menu_2"
        android:title="搜索" />

    <item
        android:id="@+id/menu_3"
        android:title="我的" />
</menu>

Toolbar

环境:android 模拟器5.0
1.布局


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 

2.代码

    mToolbar = (Toolbar) findViewById(R.id.toolbar);
        // Logo
        mToolbar.setLogo(R.drawable.home_highlight);
        // 主标题
        mToolbar.setTitle("Title");
        // 副标题
        mToolbar.setSubtitle("Sub Title");
        //设置toolbar
        setSupportActionBar(mToolbar);
        //左边的小箭头(注意某些版本api需要在setSupportActionBar(toolbar)之后才有效果)
        mToolbar.setNavigationIcon(R.drawable.home_unselected);
        //菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)
        mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                Log.d(TAG, "onMenuItemClick: "+menuItem.getTitle());
                return false;
            }
        });
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "setNavigationOnClickListener: ");
            }
        });

3.问题: 正常的设置完之后菜单item图标是不会显示的。解决如下:

    @SuppressLint("RestrictedApi")
    @Override
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {

        try {
           Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
            method.setAccessible(true);
            method.invoke(menu, true);
        } catch ( Exception e) {
            e.printStackTrace();
        }
        return super.onPrepareOptionsPanel(view, menu);
    }

4.菜单栏的主题样式

<!--自定义toolbar菜单样式-->
<style name="toolbarMenuStyle" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
    <!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
    <item name="overlapAnchor">false</item>
    <!-- 弹出层背景颜色 -->
    <item name="android:popupBackground">@color/material_deep_teal_500</item>
    <!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar -->
    <item name="android:dropDownVerticalOffset">5dp</item>
    <!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
    <item name="android:dropDownHorizontalOffset">-2dp</item>
    <!--文字颜色-->
    <item name="android:textColor">@color/toolbar_meun</item>

</style>

// 布局引入样式
<android.support.v7.widget.Toolbar
    android:background="@color/material_deep_teal_500"
    android:id= "@+id/toolbar"
    android:layout_width="match_parent"
    app:popupTheme="@style/toolbarMenuStyle"
    android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>

5.兼容性

要注意的是要兼容5.0以下就使用V7包下的Toobar!

android:minHeight="?attr/actionBarSize":设置标题栏最小高度为ActionBar的高度。

android:background="?attr/colorPrimary":该主题下的主色。

相关文章

网友评论

      本文标题:optionMenu Toolbar contextMenu

      本文链接:https://www.haomeiwen.com/subject/zbfdqctx.html