我已成功实施Appcompat V7搜索小工具。虽然在手机上调试应用程序它显示没有问题。(在我试过的许多手机上) 但是当我导出签名的应用程序。 安装并打开后,该活动崩溃了。 在“搜索小组件”中的OnCreateOptionsMenu()方法中显示错误
这是菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/group_search_box"
android:title="@string/search_label"
android:icon="@drawable/ic_action_action_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
以下是它的实施方式。
SearchManager searchManager = (SearchManager)
getActivity().getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.group_search_box);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
这在调试时在所有手机上都能正常工作,但在构建apk后它无效。
我认为这是因为proguard。 我该如何修复这个错误?
答案 0 :(得分:1)
您的模块目录中应该有一个proguard-rules.pro文件。
将以下内容添加到其中......
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
答案 1 :(得分:0)
试试这个:
res- menu-&gt; actionbar_activity_base.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/item_menu_search"
android:icon="@drawable/ic_action_search"
yourapp:showAsAction="ifRoom|collapseActionView"
yourapp:actionViewClass="android.support.v7.widget.SearchView" >
</item>
</menu>
和java:
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
private SearchView mSearchView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar_activity_base, menu);
final MenuItem searchItem = menu.findItem(R.id.item_menu_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mSearchView.setQueryHint(Html
.fromHtml("<font color='#ffffff'> Search All</font>"));
// mSearchView.setHintTextColor(getResources().getColor(android.R.color.white));
// / mSearchView.setTextSize(14);
isClosed = true;
mSearchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String searchString) {
// TODO Auto-generated method stub
Log.i("fb", searchString + "submit");
}
@Override
public boolean onQueryTextChange(String arg0) {
// TODO Auto-generated method stub
Log.i("fb", arg0 + "change");
return false;
}
});
mSearchView
.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
Log.i("fb", "focus chagne");
searchItem.collapseActionView();
mSearchView.setQuery("", false);
}
}
});
return true;
}
答案 2 :(得分:0)
在搜索项目的menu.xml文件中刚刚将android:actionViewClass =“android.support.v7.widget.SearchView”更改为app:actionViewClass =“android.support.v7.widget.SearchView”并且代码工作正常,现在搜索项目如下所示:
<item android:id="@+id/search_menu"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="@string/search_title"
android:icon="@drawable/ic_search_white_24dp"
app:showAsAction="ifRoom|collapseActionView" />