【发布时间】:2018-03-27 12:32:13
【问题描述】:
我正在尝试在我的应用的主 Activity 上实现搜索栏。为此,我使用了来自android developer website 的文档。
我按照说明进行操作,并且我有我的搜索栏,我可以在其中进行一些查询。这里的问题是,当我第一次尝试进行搜索时,我必须在搜索图标上单击 2 次。
首先,我的栏看起来像一个默认栏: Search bar by default
我注意到这个图标不是很明显的白色,它好像有一些透明度,但我选择了一个全白色的图标。
然后单击图标后,我的栏看起来像这样: Search bar clicked one time
图标向左,我有一个后退按钮,因为我已经在搜索字段中。
当我再次点击搜索图标时,我终于得到了我想要的结果: Search bar in edit mode
当我退出搜索栏并再次执行时,1或2次相同,然后,我有正常行为,只需单击一下即可从第一张图像转到最后一张。
这是我的文件:
menu_app.xml
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@drawable/ic_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
</menu>
AndroidManifest.xml
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEARCH"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
可搜索的.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search"/>
MainActivity.java 中的 OnCreateOptionsMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d(TAG, s);
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
Log.d(TAG, s);
return false;
}
});
return true;
}
提前感谢您的帮助!
【问题讨论】:
-
终于找到了我的问题的解决方案,我使用了 android.widget.SearchView 类中的 SearchView 和支持库中的工具栏,所以为什么行为不好,只是更改了
app:actionViewClass="android.widget.SearchView"到app:actionViewClass="android.support.v7.widget.SearchView"现在运行良好!
标签: android android-layout searchview searchbar