我想创建一个类似于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进入溢出菜单。有谁知道如何防止这种情况?
答案 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);
}