我的Android应用程序支持2.2及更高版本。我正在使用appcompat支持库作为操作栏,所以它只应显示是否有不适合的东西。我希望我的操作栏支持溢出按钮(三个垂直方块),在单击时显示其他项目的菜单。
在我的菜单文件中,我设置了三个项目。但是在应用程序上我只看到其中两个,并且溢出按钮也没有显示。
activity_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:icon="@drawable/checkbox"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings2"
android:icon="@drawable/checkbox_checked"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings3"
android:icon="@drawable/ic_launcher"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
</menu>
java文件
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
public class Activity_Menu extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_menu, menu);
//return true;
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}
清单
<activity
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
android:name="sord.ids_connect.Activity_Menu"
android:screenOrientation="portrait"
android:label="@string/title_activity_menu" >
</activity>
答案 0 :(得分:14)
一般参考
1 - 覆盖onCreateOption并使菜单膨胀
注意强>
如果你返回true或者调用super
并不重要@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_menu, menu);
return super.onCreateOptionsMenu(menu);
}
2 - 将命名空间添加到menu.xml文件中。
xmlns:**yourapp**="http://schemas.android.com/apk/res-auto"
3 - 将showAsAction设置为始终或 ifRoom
**yourapp**:showAsAction="ifRoom"
4 - 如果您使用的是appcompat,请确保您的Activity扩展 ActionBarActivity ,您不必更改ActionBar的任何值,以便能够在栏中看到menuOption。
最后你会有类似的东西[记得为 yourapp 使用正确的命名空间]
main.xml中
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/action_settings"
yourapp:showAsAction="ifRoom" />
您的活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
答案 1 :(得分:7)
如果您正在使用支持库,则需要从您自己的命名空间声明showAsAction;看起来像app:showAsAction
。您可以参考eOnOe的答案。
使用android:showAsAction
将无法使用支持库,因为它使用了自己的操作栏实现,而不是框架的实现。
您还可以始终将项目分组到图标中,例如:
<item ...
android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark">
<menu>
<item .../>
<item .../>
</menu>
</item>
答案 2 :(得分:2)
只有当您的设备没有菜单按钮时,Android才会显示溢出菜单。当然你可以为每个设备创建hack默认设置,但它不是推荐的解决方案。并为您的每件商品添加android:showAsAction="never"
,如果您没有菜单按钮,则表示您的设备会显示溢出菜单。
答案 3 :(得分:1)
我正在手机上测试,当我按下菜单按钮时,我看到菜单显示在底部,只有一个选项显示“设置”
那就是溢出。
为什么当我在菜单文件中有3个项目时,只有1个选项出现在那里?
因为其他两个都在操作栏中。您指定了ifRoom
,并且有两个空间,而不是三个。
答案 4 :(得分:0)
您需要菜单菜单布局如下
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_container"
android:title="Menu"
android:showAsAction="never">
<item
android:id="@+id/action_settings"
android:icon="@drawable/checkbox"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings2"
android:icon="@drawable/checkbox_checked"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings3"
android:icon="@drawable/ic_launcher"
android:title="@string/action_settings"
sord.ids_connect:showAsAction="ifRoom" />
</item>
</menu>
答案 5 :(得分:0)
Change Your menu.xml with the following code.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_container"
android:title="Menu"
android:showAsAction="always">
<item
android:id="@+id/action_settings"
android:icon="@drawable/checkbox"
android:title="@string/action_settings"
android:showAsAction="always"/>
<item
android:id="@+id/action_settings2"
android:icon="@drawable/checkbox_checked"
android:title="@string/action_settings"
android:showAsAction="always" />
<item
android:id="@+id/action_settings3"
android:icon="@drawable/ic_launcher"
android:title="@string/action_settings"
android:showAsAction="always" />
</item>
</menu>
答案 6 :(得分:-2)
我遇到了同样的问题。我解决了它:
1)评论return true;
2)取消注释return super.onKeyUp(keyCode, event);
在公开boolean onKeyUp(int keyCode, KeyEvent event)