【问题标题】:How to add menu button without action bar?如何在没有操作栏的情况下添加菜单按钮?
【发布时间】:2020-10-06 15:08:44
【问题描述】:

我想在我的应用右上角添加一个菜单按钮,并且没有操作栏,就像下面屏幕截图中的 Google Fit 应用一样。 谁能帮帮我?

【问题讨论】:

    标签: android android-menu


    【解决方案1】:

    您可以简单地使用PopupMenu,例如在单击按钮时添加以下内容:

    public void showPopup(View v) {
        PopupMenu popup = new PopupMenu(this, v);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.actions, popup.getMenu());
        popup.show();
    }
    

    科特林

    fun showPopup(v : View){
       val popup = PopupMenu(this, v)
       val inflater: MenuInflater = popup.menuInflater
       inflater.inflate(R.menu.actions, popup.menu)
       popup.setOnMenuItemClickListener { menuItem ->
          when(menuItem.itemId){
             R.id.action1-> {
                 
             }
             R.id.action2-> {
    
             }
          }
          true
       }
       popup.show()
    }
    

    欲了解更多信息,请阅读Creating a Popup Menuhttp://developer.android.com/guide/topics/ui/menus.html

    【讨论】:

    • 我应该在哪里调用这个方法?
    • 项目点击监听器可以这样添加: popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R. id.menuItem1:返回 true;默认:返回 false;} } });
    • 如果你想让popup.gravity = Gravity.END出现在屏幕右侧(默认显示在左侧),请在充气前使用popup.gravity = Gravity.END
    • @Quinn 在 API 级别 23 之前似乎不支持它。但是,您可以将重力作为构造函数参数传递:PopupMenu(this, v, Gravity.End),这是受支持的。
    【解决方案2】:

    在布局中添加工具栏并使其透明。这是将菜单项添加到布局的最佳解决方案,同时使外观没有操作栏/工具栏。

    布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <!-- The rest of your code here -->
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:background="@android:color/transparent"/>
    
    </RelativeLayout>
    

    主题

    <resources>
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
        </style>
    </resources>
    

    扩展菜单、设置标题、菜单点击监听器的示例。

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle("Toolbar");
    toolbar.inflateMenu(R.menu.menu_main);
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if (item.getItemId() == R.id.action_refresh) {
    
            }
            return false;
        }
    });
    

    不要将工具栏设置为操作栏。主题只是将其完全删除。

    【讨论】:

    • 白底,不透明!
    【解决方案3】:
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_overflow_holo_dark"
        android:contentDescription="@string/descr_overflow_button"
        android:onClick="showPopup" />
    

    在要显示此菜单的 xml 文件中添加上述行。

    public void showMenu(View v) {
    
        PopupMenu popup = new PopupMenu(this, v);
        // This activity implements OnMenuItemClickListener
        popup.setOnMenuItemClickListener(this);
        popup.inflate(R.menu.actions);
        popup.show();
    }
    
    @Override
    public boolean onMenuItemClick(MenuItem item) {
    
        switch (item.getItemId()) {
            case R.id.archive:
                archive(item);
                return true;
            case R.id.delete:
                delete(item);
                return true;
            default:
                return false;
        }
    }
    

    欲了解更多详情,请访问: https://developer.android.com/guide/topics/ui/menus.html

    【讨论】:

    • onMenuItemClick 不存在你在说什么?
    • onMenuItemClick 一直工作到现在。 see this
    【解决方案4】:

    我认为您不能添加没有操作栏的菜单。但是,我可以考虑两种方法。

    1. 创建与背景颜色相同的操作栏,使其不显示,然后添加菜单。

    2. 只需在屏幕右上角添加一个按钮,然后将下拉菜单放在布局中即可。

    或使用@M-Y 建议的弹出菜单

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多