美文网首页
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