SearchView 没有获得焦点
SearchView not getting focus
编辑 对于任何想知道的人,我的问题是我使用的是 android.widget.SearchView
而不是 android.support.v7.widget.SearchView
。我希望这可以帮助遇到同样问题的其他人!
原版Post
我正尝试按照官方指南在 Android ActionBar 中实现 SearchView:http://developer.android.com/training/search/setup.html
在没有找到问题后,我终于剥离到最基本的 Hello World 应用程序,令我惊讶的是,这个错误仍然存在于一个最小的应用程序中!
这是错误:
搜索图标出现在菜单栏中,没问题。当我单击它时,搜索栏会展开(如预期的那样),但没有光标,也没有出现软键盘。 (我想post一张图,但是我的声望太低了:(
这是相关代码,虽然我实际上只是创建了一个新的 Android 应用程序并将该项目添加到 menu/menu_main.xml。
MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
menu_main.xml
<item android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@android:string/search_go"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
使用这个是menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="your activity context here"><item
android:id="@+id/mi_search"
android:title="@string/search"
android:orderInCategory="2"
android:icon="@drawable/searchicon"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView" />
和 onCreateOptionsMenu(Menu menu)
中的代码:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.mi_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
在onOptionsItemSelected()
中:
case R.id.mi_search:
onSearchRequested();
break;
这个问题在 2022 年仍然适用,但如果您使用 androidx(您应该这样做),则必须更新答案。
菜单项必须使用 androidx.appcompat.widget.SearchView
而不是 android.widget.SearchView
或 android.support.v7.widget.SearchView
。
<item android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@android:string/search_go"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
还必须更新 onCreateOptionmenu
覆盖以使用 androidx class。这是 Kotlin 代码:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.main, menu)
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
menu.findItem(R.id.search).actionView as androidx.appcompat.widget.SearchView).apply {
setSearchableInfo(searchManager.getSearchableInfo(componentName))
}
}
编辑 对于任何想知道的人,我的问题是我使用的是 android.widget.SearchView
而不是 android.support.v7.widget.SearchView
。我希望这可以帮助遇到同样问题的其他人!
原版Post
我正尝试按照官方指南在 Android ActionBar 中实现 SearchView:http://developer.android.com/training/search/setup.html
在没有找到问题后,我终于剥离到最基本的 Hello World 应用程序,令我惊讶的是,这个错误仍然存在于一个最小的应用程序中!
这是错误: 搜索图标出现在菜单栏中,没问题。当我单击它时,搜索栏会展开(如预期的那样),但没有光标,也没有出现软键盘。 (我想post一张图,但是我的声望太低了:(
这是相关代码,虽然我实际上只是创建了一个新的 Android 应用程序并将该项目添加到 menu/menu_main.xml。 MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
menu_main.xml
<item android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@android:string/search_go"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
使用这个是menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="your activity context here"><item
android:id="@+id/mi_search"
android:title="@string/search"
android:orderInCategory="2"
android:icon="@drawable/searchicon"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView" />
和 onCreateOptionsMenu(Menu menu)
中的代码:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.mi_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
在onOptionsItemSelected()
中:
case R.id.mi_search:
onSearchRequested();
break;
这个问题在 2022 年仍然适用,但如果您使用 androidx(您应该这样做),则必须更新答案。
菜单项必须使用 androidx.appcompat.widget.SearchView
而不是 android.widget.SearchView
或 android.support.v7.widget.SearchView
。
<item android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@android:string/search_go"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
还必须更新 onCreateOptionmenu
覆盖以使用 androidx class。这是 Kotlin 代码:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.main, menu)
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
menu.findItem(R.id.search).actionView as androidx.appcompat.widget.SearchView).apply {
setSearchableInfo(searchManager.getSearchableInfo(componentName))
}
}