Android SearchView点击AutoCompleteTextView单次无法唤起键盘问题
解决SearchView单次点击无法唤起软键盘的问题
嘿,我来帮你搞定这个SearchView软键盘唤起的困扰!先看看你提供的布局代码:
<android.support.v7.widget.SearchView android:id="@+id/search_view" app:defaultQueryHint="Search By Company" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/greybg" android:gravity="center" android:focusableInTouchMode="true" app:searchHintIcon="@drawable/ic_search_black" app:closeIcon="@drawable/ic_search_close_black" app:iconifiedByDefault="false" />
你遇到的首次点击AutoCompleteTextView无法唤起软键盘的问题,大概率是焦点传递或者系统软键盘触发逻辑的小bug,下面给你几个实用的解决方案:
方案一:直接针对内部EditText设置触摸监听
SearchView内部的输入框是AutoCompleteTextView,我们可以找到它并手动处理焦点和软键盘唤起:SearchView searchView = findViewById(R.id.search_view); // 注意:如果用的是AndroidX,把包名换成androidx.appcompat.R.id.search_src_text AutoCompleteTextView searchEditText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setOnTouchListener((v, event) -> { // 先请求焦点 v.requestFocus(); // 强制唤起软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT); return false; // 不拦截事件,让后续逻辑正常执行 });方案二:给SearchView整体设置点击监听
如果方案一没生效,试试给整个SearchView设置点击事件,确保点击时先展开输入框再唤起键盘:searchView.setOnClickListener(v -> { // 确保SearchView处于非图标化状态 searchView.setIconified(false); AutoCompleteTextView editText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); editText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); });方案三:检查父布局的焦点拦截
有时候父布局的android:clickable="true"或者android:focusable="true"属性会抢占SearchView的焦点,导致输入框无法正常获取焦点。你可以检查下SearchView的父布局,暂时去掉这些属性试试,看是否能解决问题。
我之前处理过类似的场景,方案一的成功率最高,你可以优先尝试。如果是AndroidX项目,记得把代码里的android.support.v7替换成androidx.appcompat哦!
内容的提问来源于stack exchange,提问作者Prateek Gupta
相关产品推荐
相关产品推荐

