Android活动菜单

时间:2017-04-06 07:15:54

标签: java android menu

我想创建一个类似于Whatsapp的选项菜单,即使该设备有自己的“硬件”选项按钮。我在网上找到的解决方案工作得很好,直到我想向Bar添加另一个动作。

菜单:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
 <item
            android:title=""
            android:id="@+id/addViewedMovie"
            android:icon="@mipmap/ic_add_to_queue_black_24px"

            android:showAsAction="always"

            ></item>    
        <item
            android:title=""
            android:id="@+id/menu_overflow"
            android:icon="@mipmap/ic_more_vert_white_48dp"

            app:showAsAction="always">
            <menu>
                <item
                    android:id="@+id/show_settings"
                    app:showAsAction="never"
                    android:title="@string/setttings"/>
                <item
                    android:id="@+id/show_help"
                    app:showAsAction="never"
                    android:title="@string/help"/>
                <item
                    android:id="@+id/show_about"
                    app:showAsAction="never"
                    android:title="@string/about"/>

            </menu>

        </item>

    </menu>

这在我的MainActivity中:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

使用此应用程序强制addViewedMovie Action进入溢出菜单。有谁知道如何防止这种情况?

4 个答案:

答案 0 :(得分:0)

尝试使用此代码并告诉我它是否正常工作..你应该使用app:showAsAction而不是android:showAsAction你也不需要使用子菜单来显示3个点..就在下面代码工作正常也显示3点

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:title="Movie"
        android:id="@+id/addViewedMovie"
        android:icon="@mipmap/ic_add_to_queue_black_24px"
        app:showAsAction="always"/>  

   <item
        android:id="@+id/show_settings"
        app:showAsAction="never"
        android:title="@string/setttings"/>
   <item
        android:id="@+id/show_help"
        app:showAsAction="never"
        android:title="@string/help"/>
   <item
        android:id="@+id/show_about"
        app:showAsAction="never"
        android:title="@string/about"/>
</menu>

答案 1 :(得分:0)

简单。 使用app而不是android作为app用于设计支持库。 因此,在Gradle构建依赖项中,您必须:编译com.android.support:design.....。但是,我已经看到你已经在下面使用它了。所以,

只需在addViewedMovie项目中使用app:showAsAction="never"代替android:showAsAction="always"

请记住:never表示它将出现在溢出菜单项上。 always表示将在操作栏中显示。

答案 2 :(得分:0)

res 文件夹中创建文件夹名称菜单

<强> menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search"
        android:icon="@drawable/ic_launcher"
        myapp:showAsAction="ifRoom" />

    <item android:id="@+id/abc"
        android:title="ABC" />
    <item android:id="@+id/abc1"
        android:title="ABC1" />
    <item android:id="@+id/abc2"
        android:title="ABC2" />
</menu>

在java文件中输入: -

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.search:

                return true;

            case R.id.abc:

                return true;

            case R.id.abc1:

                return true;

            case R.id.abc2;

                return true;

            default:

                return super.onOptionsItemSelected(item);
        }
    }

答案 3 :(得分:0)

如果您在片段中使用,请在onCreate

中添加以下行
  

setHasOptionsMenu(真);

还有两个功能

     @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
   }

在上述方法中夸大您的观点。聆听下面的动作。

@Override public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
  }