Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在没有操作栏的情况下添加菜单按钮?_Android_Android Menu - Fatal编程技术网

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

Android 如何在没有操作栏的情况下添加菜单按钮?,android,android-menu,Android,Android Menu,我想在我的应用程序右上角添加一个菜单按钮,而不添加操作栏,就像下面截图上的Google Fit应用程序一样。 有人能帮我吗 您可以简单地使用弹出式菜单,例如,单击按钮时添加以下内容: public void showPopup(View v) {     PopupMenu popup = new PopupMenu(this, v);     MenuInflater inflater = popup.getMenuInflater();     inflater.inflate(R.menu

我想在我的应用程序右上角添加一个菜单按钮,而不添加操作栏,就像下面截图上的Google Fit应用程序一样。 有人能帮我吗


您可以简单地使用
弹出式菜单
,例如,单击按钮时添加以下内容:

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 show弹出窗口(v:View){
val popup=PopupMenu(本,v)
val充气器:菜单充气器=弹出菜单充气器
充气机。充气(右菜单。动作,弹出菜单)
popup.setOnMenuItemClickListener{menuItem->
何时(menuItem.itemId){
R.id.action1->{
}
R.id.action2->{
}
}
真的
}
popup.show()
}
有关更多信息,请阅读创建弹出菜单的

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

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

  • 只需在屏幕右上角添加一个按钮,然后将下拉列表放入布局中


  • 或者使用@M-Y建议的弹出菜单在布局中添加工具栏并使其透明。这是在没有操作栏/工具栏的情况下向布局添加菜单项的最佳解决方案

    布局

    <?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>
    
    不要将工具栏设置为操作栏。主题只是将其完全删除

    <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" />
    
    有关更多详细信息,请浏览:

    我应该在哪里调用此方法?项单击侦听器可以这样添加:popup.setOnMenuItemClickListener(新建PopupMenu.OnMenuItemClickListener(){@Override public boolean onMenuItemClick(MenuItem项){开关(Item.getItemId()){case R.id.menuItem1:return true;default:return false;}}}});如果希望它位于屏幕右侧,请在将其充气之前使用
    popup.gravity=gravity.END
    (默认情况下为我显示在左侧)@Quinn似乎在API级别23之前不受支持。但是,您可以将gravity作为构造函数参数传递:
    PopupMenu(this,v,gravity.End)
    ,这是受支持的。
    onMenuItemClick
    不存在您在说什么?
    onMenuItemClick
    到目前为止一直在工作。它有白色背景,不透明!
    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;
        }
    });
    
    <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" />
    
    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;
        }
    }