Mci*_*gwe 113 android menuitem android-support-library android-actionbar-compat
我正在使用从Android 4.3(API级别18)开始提供的新v7 appcompat库.
无论showAsAction中为菜单项指定了什么,它都没有显示 - 它总是创建溢出菜单图标,甚至在菜单下放置一个菜单项.
试图将菜单添加到这样的活动:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_sizes, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是我的菜单xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Run Code Online (Sandbox Code Playgroud)
它是新支持库v7的错误,还是代码有问题?我以前多次使用与ActionBarSherlock类似的代码.
Nik*_*ski 309
您可能缺少必需的命名空间:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
[yourapp]:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Run Code Online (Sandbox Code Playgroud)
替换[yourapp]为您的应用程序名称或您心所欲望的任何命名空间.
其他值得检查的事情:
ActionBarActivity检查问题是否仍然存在.
Android参考文档:添加动作按钮.以下是相关文字:
如果您的应用程序使用支持库以获得与Android 2.1一样低的版本的兼容性,则android:namespace中不提供showAsAction属性.相反,此属性由支持库提供,您必须定义自己的XML命名空间并将该命名空间用作属性前缀.(自定义XML命名空间应该基于您的应用程序名称,但它可以是您想要的任何名称,并且只能在您声明它的文件范围内访问.)
Mci*_*gwe 52
弄清楚自己.使用支持库v7,showAsAction应该在这样的自定义命名空间下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:balloonberry="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
balloonberry:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Run Code Online (Sandbox Code Playgroud)
pet*_*ejl 31
还要确保在ActionBarActivity.onCreateOptionsMenu()方法中使用正确的inflater.
正确的解决方案:
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_example, menu);
Run Code Online (Sandbox Code Playgroud)
解决方案不正确:
MenuInflater menuInflater = new MenuInflater(this);
menuInflater.inflate(R.menu.menu_example, menu);
Run Code Online (Sandbox Code Playgroud)
Bak*_*ker 24
对于碎片
具有自定义命名空间的菜单将阻止 showAsAction显示.
使用showAsAction的"android:"前缀将起作用,即使Android Studio会注意到您应该使用自定义名称空间.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_add_checkin"
android:title="Add Checkin"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
这是使用Android SDK 22和支持v4片段,以防万一.
Luk*_*kas 16
有同样的问题,但在Android 5.我有3项,但操作系统忽略我的属性"总是",只显示2项.我的解决方案:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.d(TAG, "onCreateOptionsMenu()");
inflater.inflate(R.menu.your_menu, menu);
for (int j = 0; j < menu.size(); j++) {
MenuItem item = menu.getItem(j);
Log.d(TAG, "set flag for " + item.getTitle());
item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
}
Run Code Online (Sandbox Code Playgroud)
还要确保您具有命名空间的正确路径.如果错误,它不会给你一个错误信息.
我有
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/res-auto">
Run Code Online (Sandbox Code Playgroud)
代替
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
Run Code Online (Sandbox Code Playgroud)
我所知道的只是它没有用.不知道我是如何设法忘记路径的/ apk部分,但它发生了.没有错误消息,只是一个难以捉摸的错误追踪.
在我的情况下,我不得不从我的应用程序的build.gradle编译'com.android.support:appcompat-v7:21.0.3'中删除.
注意:我的min sdk = 14,由android studio创建的项目插入了我不必要的依赖.
在这个替换之后你可以写android:showAsAction ="always"
| 归档时间: |
|
| 查看次数: |
81209 次 |
| 最近记录: |