如何在没有操作栏的情况下添加菜单按钮?

47
我想在我的应用程序右上角添加一个菜单按钮,且没有操作栏,就像下面截图中 Google Fit 应用程序一样。 有人可以帮忙吗?
4个回答

74

你可以简单地使用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();
}

Kotlin

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()
}

欲了解更多信息,请阅读创建弹出菜单http://developer.android.com/guide/topics/ui/menus.html


我应该在哪里调用这个方法? - jorge saraiva
1
可以像下面这样添加项目单击监听器:popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.menuItem1: return true; default: return false; } } }); - Pranav Mahajan
2
如果你想让弹出窗口显示在屏幕右侧(默认情况下会显示在左侧),请在充气之前使用 popup.gravity = Gravity.END - Quinn
@Quinn 看起来在 API 级别 23 之前不支持。但是,您可以将 gravity 作为构造函数参数传递:PopupMenu(this, v, Gravity.End),这是受支持的。 - Max

20

在布局中添加一个工具栏并将其设置为透明。这是向布局添加菜单项的最佳解决方案,同时呈现出没有操作栏/工具栏的外观。

布局

<?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;
    }
});

不要将工具栏设置为操作栏。主题会完全删除它。


它有白色背景,不是透明的! - user924

9
<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不存在,你在说什么? - user25
onMenuItemClick 到目前为止完全工作正常。请参见此链接 - Aashish Kumar

1
我认为你不能在没有操作栏的情况下添加菜单。但是,我可以想到两种方法:
  1. 创建与背景颜色相同的操作栏,以便它不会显示出来,然后添加菜单。

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

或者像@M-Y建议的那样使用弹出式菜单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接