ActionBar 中的 SearchView 显示图标两次但未获得自动对焦。这是为什么?
SaerchView in ActionBar showing icon twice and not getting auto focus. Why is that?
我有 SearchView
片段 ActionBar
。问题是当我第一次触摸它向左移动的图标时(扩展 SearchView
)。然后我必须再次触摸它才能获得文本字段。下面的图片会更清楚。
我已经尝试过的:
requestFocusFromTouch();
requestFocus();
setIconifiedByDeafault(false);
setIconified(); //Works but opens keypad even before touching searchview
代码:
片段的 onPrepareOptionsMenu() 和 onCreateOptionsMenu():
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
SearchView searchView = (SearchView)menu.findItem(R.id.search).getActionView();
searchView.setIconified(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mAdapter.getFilter().filter(newText);
return false;
}
});
}
menu_search.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=".MainActivity">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView"/>
</menu>
图片:
最初:
触摸一次:(展开)
再次感动:(重点)
如果您使用的是 appcompat-v7
,则需要使用 SearchView
(android.support.v7.widget.SearchView
) 的版本。混合和匹配与本机操作栏和 appcompat-v7
backport 关联的内容通常不起作用。
What you suggest on using native ActionBar and SearchView?
您考虑使用 appcompat-v7
的三个主要原因:
您想要一致的操作栏,并且您的 minSdkVersion
小于 11,因此您需要一个向后移植的操作栏。
您想尝试在 Android 4.x 上采用 Material 设计风格的外观和感觉,因为 appcompat-v7
会给您一个操作栏和一些小部件,看起来更像它们的 Theme.Material
对应物。
你有 运行 本地操作栏实现的问题,可能是 select 设备上由于制造商的错误,你想使用更独立的实现避免这些问题的操作栏。
如果这三个原因中的 none 令人信服,请随意使用本机操作栏和本机 SearchView
。
我有 SearchView
片段 ActionBar
。问题是当我第一次触摸它向左移动的图标时(扩展 SearchView
)。然后我必须再次触摸它才能获得文本字段。下面的图片会更清楚。
我已经尝试过的:
requestFocusFromTouch();
requestFocus();
setIconifiedByDeafault(false);
setIconified(); //Works but opens keypad even before touching searchview
代码:
片段的 onPrepareOptionsMenu() 和 onCreateOptionsMenu():
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
SearchView searchView = (SearchView)menu.findItem(R.id.search).getActionView();
searchView.setIconified(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mAdapter.getFilter().filter(newText);
return false;
}
});
}
menu_search.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=".MainActivity">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView"/>
</menu>
图片:
最初:
触摸一次:(展开)
再次感动:(重点)
如果您使用的是 appcompat-v7
,则需要使用 SearchView
(android.support.v7.widget.SearchView
) 的版本。混合和匹配与本机操作栏和 appcompat-v7
backport 关联的内容通常不起作用。
What you suggest on using native ActionBar and SearchView?
您考虑使用 appcompat-v7
的三个主要原因:
您想要一致的操作栏,并且您的
minSdkVersion
小于 11,因此您需要一个向后移植的操作栏。您想尝试在 Android 4.x 上采用 Material 设计风格的外观和感觉,因为
appcompat-v7
会给您一个操作栏和一些小部件,看起来更像它们的Theme.Material
对应物。你有 运行 本地操作栏实现的问题,可能是 select 设备上由于制造商的错误,你想使用更独立的实现避免这些问题的操作栏。
如果这三个原因中的 none 令人信服,请随意使用本机操作栏和本机 SearchView
。