SearchView 默认聚焦,但是当我尝试显示软件键盘时 - 它不会发生:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
但是当我点击 SearchView 时 - 它确实如此。为什么?
SearchView 默认聚焦,但是当我尝试显示软件键盘时 - 它不会发生:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
但是当我点击 SearchView 时 - 它确实如此。为什么?
固定的!
mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
showInputMethod(view.findFocus());
}
}
});
和
private void showInputMethod(View view) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(view, 0);
}
}
我遇到了仍然无法打开键盘的 SearchView 的这个问题,并且能够通过添加 200 毫秒的延迟来做到这一点:
mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(final View view, boolean hasFocus) {
if (hasFocus) {
view.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view.findFocus(), 0);
}
}, 200);
}
}
});
如果您使用的是SearchView:
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:iconifiedByDefault="true"
app:showAsAction="always"
app:iconifiedByDefault="true"/>
然后只需将其添加到您的onCreate方法中:
final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
这个对我有用。
怎么用setOnFocusChangeListener
?
searchview.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
}
});
最好和最简单的方法:
android:focusable="true"
app:iconifiedByDefault="false"
android:focusableInTouchMode="true"
在 SearchView 下将以上三行添加到您的 xml 中,看看神奇......!!
<EditText
android:id="@+id/edt_search"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:background="@null"
android:ellipsize="end"
android:hint="@string/SERACH"
android:imeOptions="actionSearch"
android:inputType="textVisiblePassword"
android:singleLine="true"
android:textAlignment="viewStart" />
像这样添加<requestFocus />
您的搜索视图
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@android:color/transparent"
android:imeOptions="actionSearch"
android:maxLines="1"
android:padding="8dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="@android:color/white"
android:textColorHint="#e6e6e6">
<requestFocus />
</EditText>
我用下一个简单的方法解决了这个问题。
搜索视图菜单项:
<item
android:id="@+id/menu_item_search"
android:icon="@drawable/ic_search"
android:title="@android:string/search_go"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
要以编程方式展开 SearchView 并显示键盘,请调用:
mMenuItemSearch.expandActionView();
mSearchView.setQuery("your default query test or null", true);
使用不同的 showAsAction 标志进行测试。结果,当标志:“总是”时,键盘不显示。然而,一切都适用于标志:“ always|collapseActionView ”
expandActionView() + setQuery("null 或恢复文本", true); 可以在创建(或恢复)视图时调用以显示键盘并专注于搜索。PS:调用mSearchView.clearFocus(); 经过这两种方法清除焦点。