getActionView()正在重排null。我做错什么了?
我正在扩展活动并使用android:minSdkVersion="11" android:targetSdkVersion="19"
<item
android:id="@+id/search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_search"
android:showAsAction="collapseActionView|ifRoom"
app:showAsAction="always"
android:title="@string/search"/>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
searchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) searchItem.getActionView();
mSearchView.setQueryHint("Search");
return true;
}清单
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>发布于 2015-01-12 14:07:07
我看到了app:showAsAction="always" -- app命名空间意味着您正在使用Appcompat v7库.
Appcompat库拥有在MenuCompat/MenuItemCompat类中将菜单项作为静态方法的方法(您应该像使用menu.methodXXX()一样使用MenuCompat.methodXXX(menu) )
现在,要在菜单中定义一个actionViewClass(以及在api中添加的其他属性,然后更新到11),您应该使用app命名空间来代替android命名空间。
所以android:actionViewClass应该变成app:actionViewClass
在代码中,应该使用MenuItemCompat.getActionView(searchItem)而不是searchItem.getActionView()
记住在菜单xml文件的根元素中添加名称空间app,如xmlns:app ="http://schemas.android.com/apk/res-auto"
还有一个小提示(当您使用11作为min时,您的代码应该工作正常,但是.)将android.widget.SearchView替换为android.support.v7.widget.SearchView,因为它(标准SearchView)在从11到最新的不同API版本上的工作方式不同(如果使用API > 11添加到SearchView上的方法,则会得到API 11中添加的方法)。
https://stackoverflow.com/questions/27903361
复制相似问题