我只想通过代码调整ActionBar MenuItem的视图。
不幸的是,似乎getActionView总是返回null!
我的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = this.getSupportMenuInflater();
inflater.inflate(R.menu.folder, menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onPrepareOptionsMenu(final Menu menu) {
MenuItem menuFolder = menu.findItem(R.id.menu_folder);
Log.i("", "* onPrepareOptionsMenu *" + menuFolder);
Log.i("", "* getActionView *" + menuFolder.getActionView());
记录是:
01-11 22:13:42.884:I /(7893):* onPrepareOptionsMenu *com.actionbarsherlock.internal.view.menu.MenuItemWrapper@41401ac8
01-11 22:13:42.884:I /(7893):* getActionView * null
非常感谢您的帮助
编辑:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_folder"
android:icon="@drawable/ic_menu_archive"
android:showAsAction="always"/>
</menu>
答案 0 :(得分:44)
你应该使用
app:actionLayout="@layout/menu_actionbar_basket"
这就是诀窍 如果你使用
android:actionLayout="@layout/menu_actionbar_basket"
默认工具栏中总是会出现null异常。
答案 1 :(得分:32)
getActionView()
仅在来自setActionView
的自定义actionView时有效。
答案 2 :(得分:28)
对我来说,有效的解决方案是使用 app 命名空间而不是android。
app:actionViewClass="android.support.v7.widget.SearchView"
不要忘记申报:
xmlns:app="http://schemas.android.com/apk/res-auto"
答案 3 :(得分:6)
如果您的调试版本工作没有任何问题,并且只有发布版本存在问题,那么这可能是因为proguard配置。如果您已在应用程序中启用了proguard,请将以下行添加到proguard-rules.pro
-keep class android.support.v7.widget.SearchView { *; }
答案 4 :(得分:2)
第一个解决方案
可能是由于您没有在菜单文件中设置 actionLayout 因此请在菜单文件中设置 actionLayout
app:actionLayout="@layout/your_action_layout"
第二个解决方案 第二种解决方法是
来自
android:actionLayout="@layout/your_action_layout"
至
app:actionLayout="@layout/your_action_layout"