android menu item属性,menuitem - Android 4.3菜单项showAsAction =“always”被忽略

menuitem - Android 4.3菜单项showAsAction =“always”被忽略

我使用从Android 4.3(API级别18)开始提供的新v7 appcompat库。

无论showAsAction中为菜单项指定了什么,它都没有显示 - 它总是创建溢出菜单图标,甚至在菜单下放置一个菜单项。

试图将菜单添加到这样的活动:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu_sizes, menu);

return true;

}

这是我的菜单xml:

android:title="@string/menu_add_item"

android:orderInCategory="10"

android:showAsAction="always"

android:icon="@android:drawable/ic_menu_add" />

它是新支持库v7的错误,还是代码有问题?我以前多次使用与ActionBarSherlock类似的代码。

13个解决方案

309 votes

您可能缺少必需的命名空间:

xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">

android:title="@string/menu_add_item"

android:orderInCategory="10"

[yourapp]:showAsAction="always"

android:icon="@android:drawable/ic_menu_add" />

将ActionBarActivity替换为您的应用名称或您心所欲望的任何命名空间。

其他值得检查的事情:

查看您的活动类是否扩展为ActionBarActivity

检查问题是否仍然存在。

Android参考文档:添加动作按钮。 以下是相关文字:

如果您的应用程序使用支持库以获得与Android 2.1一样低的版本的兼容性,那么android:namespace中不提供showAsAction属性。 相反,此属性由支持库提供,您必须定义自己的XML命名空间并将该命名空间用作属性前缀。 (自定义XML命名空间应该基于您的应用程序名称,但它可以是您想要的任何名称,并且只能在您声明它的文件范围内访问。)

Nikola Despotoski answered 2019-07-05T15:13:09Z

52 votes

弄清楚自己。 使用支持库v7,showAsAction应该在这样的自定义命名空间下:

xmlns:balloonberry="http://schemas.android.com/apk/res-auto">

android:title="@string/menu_add_item"

android:orderInCategory="10"

balloonberry:showAsAction="always"

android:icon="@android:drawable/ic_menu_add" />

Mcingwe answered 2019-07-05T15:13:36Z

28 votes

还要确保在ActionBarActivity.onCreateOptionsMenu()方法中使用正确的inflater。

正确的解决方案:

MenuInflater menuInflater = getMenuInflater();

menuInflater.inflate(R.menu.menu_example, menu);

解决方案不正确:

MenuInflater menuInflater = new MenuInflater(this);

menuInflater.inflate(R.menu.menu_example, menu);

petrnohejl answered 2019-07-05T15:14:20Z

24 votes

对于碎片

具有自定义命名空间的菜单将阻止showAsAction显示。

使用" android:" showAsAction的前缀将起作用,即使Android Studio会注意到您应该使用自定义名称空间。

android:title="Add Checkin"

android:orderInCategory="10"

android:showAsAction="always"

android:icon="@android:drawable/ic_menu_add"/>

这是使用Android SDK 22和支持v4片段,以防万一。

Baker answered 2019-07-05T15:15:11Z

16 votes

有同样的问题,但在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);

}

}

Lukas answered 2019-07-05T15:15:38Z

6 votes

还要确保您具有命名空间的正确路径。 如果错误,它不会给你一个错误信息。

我有

xmlns:myapp="http://schemas.android.com/res-auto">

代替

xmlns:myapp="http://schemas.android.com/apk/res-auto">

我所知道的只是它不起作用。 不知道我是如何设法忘记路径的/ apk部分,但它发生了。 没有错误消息,只是一个难以捉摸的错误追踪。

BeccaP answered 2019-07-05T15:16:20Z

6 votes

在我的情况下,我不得不从我的应用程序的build.gradle编译中删除com.android.support:appcompat-v7:21.0.3&#39;。

注意:我的min sdk = 14,由android studio创建的项目插入了我不必要的依赖。

在这个替换之后你可以写 机器人:showAsAction=&#34;总是&#34;

Anton Kizema answered 2019-07-05T15:17:02Z

4 votes

这可能不是你的情况,但我正在使用

new MenuInflater(this).inflate(R.menu.my_menu, menu);

改变它

getMenuInflater().inflate(R.menu.my_menu, menu);

解决了这个问题!

Bakhshi answered 2019-07-05T15:18:08Z

0 votes

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

>

android:id="@id/back"

android:icon="@drawable/back"

app:showAsAction="always"

android:title="@string/back"/>

android:id="@id/save"

android:icon="@drawable/le_top_btn_icon_add"

app:showAsAction="ifRoom"

android:title="@string/save"/>

不工作,  with supportLibraryVersion =&#39; 25.1.0&#39;compileSdkVersion = 25

看到&#34;警告&#34;

应该使用带有appcompat库的app:showAsActionxmlns:app =&#34; [http://schemas.android.com/apk/res-auto"] less ...(Ctrl + F1)

使用appcompat库时,菜单资源应引用app:namespace中的showAsAction,不是android:名称空间。

同样,当不使用appcompat库时,你应该使用android:showAsAction属性。

我认为警告可以被忽视。

Bill answered 2019-07-05T15:19:17Z

0 votes

像showAsAction和actionViewClass一样添加这样的自定义命名空间:

xmlns:app="http://schemas.android.com/apk/res-auto">

android:title="@string/search"

android:icon="@drawable/ic_search"

app:showAsAction="collapseActionView|ifRoom"

app:actionViewClass="android.widget.SearchView" />

Amirouche Zeggagh answered 2019-07-05T15:19:44Z

0 votes

最简单的方法是:

xmlns:myapp="http://schemas.android.com/apk/res-auto">

android:id="@+id/history"

android:icon="@drawable/icons8_history_white_medium"

android:title="History"

myapp:showAsAction="always" />

android:id="@+id/synchrnonize"

android:icon="@drawable/icons8_synchronize_white_medium"

android:title="Synchronize"

myapp:showAsAction="always" />

Paweł answered 2019-07-05T15:20:07Z

0 votes

我通过替换解决了它

android:showAsAction="ifRoom"

app:showAsAction="ifRoom"

这就是menuitme xml的样子,

android:title="Refresh"

android:icon="@drawable/refresh2"

app:showAsAction="ifRoom" />

Haris answered 2019-07-05T15:20:52Z

0 votes

最简单的方法是通过添加修改您的代码

xmlns:app="http://schemas.android.com/apk/res-auto"

并更改此代码

android:showAsAction="always"

app:showAsAction="always"

最后

xmlns:app="http://schemas.android.com/apk/res-auto">

android:title="@string/menu_add_item"

android:orderInCategory="10"

app:showAsAction="always"

android:icon="@android:drawable/ic_menu_add" />

Abdulhakim Zeinu answered 2019-07-05T15:21:38Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值