尝试让searchview在app上工作。
sdk min 17 max 22
在模拟器api 18上进行测试
menu xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
<item android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:title="@string/search_title"
app:showAsAction="ifRoom|collapseActionView"
android:orderInCategory="200"
app:actionViewClass="android.support.v7.widget.SearchView">
</item>
<item android:id="@+id/scan"
android:title="@string/scan"
android:showAsAction="ifRoom"
android:orderInCategory="300">
</item>
</menu>
onCreateOptionsMenu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Inflate the menu; this adds items to the action bar if it is present.
inflater.inflate(R.menu.material_toolbar, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Log.d(TAG, "onQueryTextSubmit");
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
materialUpdate();
return false;
}
});
}
运行调试并查看搜索菜单项会将操作显示为null。
布局显示将android.support.v7.widget.SearchView显示为未知的xml属性。
我在这个项目中使用的是Eclipse而不是Android Studio。
答案 0 :(得分:5)
您是否正在使用Proguard或以某种方式缩小代码?
https://code.google.com/p/android/issues/detail?id=58508
当您使用像Proguard这样的minify方法时,会删除您不能直接访问的类和方法(但通过某种声明方式或反射)。为避免这种情况,您需要指示构建专门保留此类/方法。
在这种情况下,可以删除SearchView类,因为不会直接调用它。
尝试在proguard规则文件中添加此项(在gradle文件中检查getDefaultProguardFile上的正确文件名):
-keep class android.support.v7.widget.SearchView { *; }
答案 1 :(得分:0)
这就是我将SearchView添加到菜单中的方法(这是在片段中):
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
final MenuItem item = menu.add("Search");
item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
final SearchView searchView = new SearchView(getActivity());
searchView.setOnQueryTextListener(this);
searchView.setIconifiedByDefault(true);
item.setActionView(mSearchView);
}
另外,我还建议您切换到Android Studio。
答案 2 :(得分:0)
您正在使用支持库。试试这个:
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
// ...
return true;
}