Android Menu和ToolBar相关用法

一、Menu

1.onCreateOptionsMenu()

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //super.onCreateOptionsMenu(menu);

        menu.add("Menu Item")
                .setIcon(R.drawable.search)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        return true;
    }

 2.onOptionsItemSelected()方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case WHITE_BRIGHT:
            break;
        case GRAY_BRIGHT:
            break;
        case BLACK_BRIGHT:
    }        
}

 3.看一看menu.add方法的参数:

       第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
       第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
       第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
       第四个String类型的title参数,表示选项中显示的文字。

private static final int WHITE_BRIGHT = Menu.FIRST;
private static final int GRAY_BRIGHT = WHITE_BRIGHT + 1 ;
private static final int BLACK_BRIGHT = GRAY_BRIGHT + 1 ;
private static final int WHITE_DIM = BLACK_BRIGHT + 1 ;
private static final int GRAY_DIM = WHITE_DIM + 1 ;
private static final int BLACK_DIM = GRAY_DIM + 1 ;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add( 0 , WHITE_BRIGHT, 0 ,R.string.white_increase);
menu.add( 0 ,GRAY_BRIGHT, 1 ,R.string.gray_increase);
menu.add( 0 ,BLACK_BRIGHT, 2 ,R.string.black_increase);
menu.add( 0 ,WHITE_DIM, 3 ,R.string.white_decrease);
menu.add( 0 ,GRAY_DIM, 4 ,R.string.gray_decrease);
menu.add( 0 ,BLACK_DIM, 5 ,R.string.black_decrease);

return super .onCreateOptionsMenu(menu);
}

 总结,常用的和menu菜单相关的方法有:

    public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu。
    public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
    public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
    public boolean onMenuOpened(int featureId, Menu menu):菜单打开后发生的动作。

 另外:Android 动态更新Menu菜单_android menu 自定义图标-优快云博客

 

1. 对于常驻菜单,如果你想动态修改菜单的话,就必须调用 invalidateOptionsMenu() 方法去更新,为什么呢? 因为调用 invalidateOptionsMenu方法后,会重新执行一遍 onCreateOptionsMenu 和 onPrepareOptionsMenu这两个方法。

2. 对于溢出菜单,如果你想动态修改菜单的话,只需要在onPrepareOptionsMenu方法中实现即可,为什么呢?

    当你点击 更多(3个小点)图标的时候,就会回调onPrepareOptionsMenu方法。

 

二、ToolBar

1.toolbar修改后退键图标的方法

获得Toolbar的实例,直接使用setNavigationIcon(resId)即可改变原来的后退按钮图标

toolbar.setNavigationIcon(R.drawable. button_login) ;

 隐藏后退键:

activity.getActionBar().setNavigationIcon(null);

 2.自定义Toolbar的样式

 例:将toolbar的title改到中间 -> MainActivity中取消显示Title

getSupportActionBar().setDisplayShowTitleEnabled( false) ;

actionbar.setHomeAsUpIndicator(R.drawable.ic_menu): 给toolbar左上角设置图标,默认是向左的剪头
actionbar.setDisplayHomeAsUpEnabled(true): 设置 toolbar的左上角图标是否显示,true显示,false隐藏
监听的id为R.id.home

其他:
https://www.cnblogs.com/hwgt/p/5426848.html
https://blog.youkuaiyun.com/long12310225/article/details/77792301
https://www.cnblogs.com/hwgt/p/5414404.html

### 使用配置 Menu Toolbar 的方法 在 Android Studio 中,`Toolbar` 是一种灵活的组件,能够替代传统的 `ActionBar` 并提供更丰富的功能。通过结合 `Menu`,开发者可以在工具栏上展示各种操作选项。 #### 1. 声明 Toolbar 在布局文件中声明一个 `Toolbar` 组件作为应用的主要导航区域[^1]: ```xml <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:titleTextColor="@android:color/white" app:title="App Title"/> ``` 此代码片段展示了如何创建一个基本的 `Toolbar`,其中设置了宽度、高度以及背景颜色等属性[^3]。 #### 2. 配置 Menu 资源文件 为了向 `Toolbar` 添加菜单项,需先定义一个 XML 文件来描述这些项目的内容[^2]。通常会放在 `res/menu/main_menu.xml` 下面: ```xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Example of a simple action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_search" android:title="Search" android:orderInCategory="100" android:showAsAction="ifRoom|withText"/> <!-- Another example with overflow options --> <item android:id="@+id/action_settings" android:title="Settings" android:orderInCategory="101" android:showAsAction="never"/> </menu> ``` 上述例子包含了两个不同的菜单条目:一个是搜索按钮(如果空间允许则显示),另一个是设置链接,默认情况下只会在溢出菜单中可见。 #### 3. 初始化 Toolbar 及绑定 Menu 要在活动中启用自定义的 `Toolbar` 并加载相应的菜单资源,需要修改活动类中的 `onCreate()` 方法[^4]: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar myToolbar = findViewById(R.id.toolbar); // Find the toolbar view inside the activity layout. setSupportActionBar(myToolbar); // Set it as an application-level bar. getSupportActionBar().setDisplayHomeAsUpEnabled(true); // Optional, adds back arrow to toolbar. } ``` 接着重写 `onCreateOptionsMenu(Menu)` 函数以填充菜单数据到视图当中去: ```java @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); // Inflate our custom defined menu into this one. return true; } // Handle clicks on items within your menu here: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } } ``` 以上实现了当用户点击某个特定菜单项时触发对应的动作处理逻辑。 #### 4. 上下文菜单与 PopupMenu 实现方式 除了常规的操作栏外,还可以利用 `PopupMenu` 或者其他形式实现更加复杂的交互体验。例如,在某控件旁边弹出快捷命令列表: ```java private void showPopup(View v){ PopupMenu popup = new PopupMenu(this, v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.popup_menu, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this,"You Clicked : "+item.getTitle(),Toast.LENGTH_SHORT).show(); return true; } }); popup.show(); } ``` 这段脚本演示了怎样基于指定位置生成浮动式的子级选单结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值