Android SearchView光标聚焦移动时文本被白框遮挡如何解决?
解决SearchView光标移动时出现白框的问题
你遇到的这个白框是SearchView内部EditText的文本选择相关背景/控件,仅设置SearchView本身的透明属性无法解决,需要针对内部EditText做针对性处理,以下是两种可行方案:
方案一:代码内直接修改内部EditText属性
找到SearchView内嵌的输入框,直接配置透明背景及文本选择相关属性:
MenuItem searchItem = menu.findItem(R.id.action_search); SearchView filterPartsSearchView = (SearchView) searchItem.getActionView(); filterPartsSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); // 获取SearchView内部的EditText EditText searchEditText = filterPartsSearchView.findViewById(androidx.appcompat.R.id.search_src_text); // 设置输入框背景透明 searchEditText.setBackgroundColor(Color.TRANSPARENT); // 移除文本选择高亮背景 searchEditText.setHighlightColor(Color.TRANSPARENT); // 隐藏文本选择手柄(若白框是手柄背景) searchEditText.setTextSelectHandle(null); searchEditText.setTextSelectHandleLeft(null); searchEditText.setTextSelectHandleRight(null);
方案二:通过样式全局配置
在res/values/styles.xml中定义自定义SearchView样式,统一配置内部EditText的属性:
<!-- 自定义SearchView样式 --> <style name="CustomSearchViewStyle" parent="Widget.AppCompat.SearchView"> <item name="queryBackground">@android:color/transparent</item> <!-- 指定内部EditText的样式 --> <item name="searchEditTextStyle">@style/CustomSearchEditText</item> </style> <!-- 自定义搜索输入框样式 --> <style name="CustomSearchEditText" parent="Widget.AppCompat.EditText"> <item name="android:background">@android:color/transparent</item> <item name="android:textHighlightColor">@android:color/transparent</item> <item name="android:textSelectHandle">@null</item> <item name="android:textSelectHandleLeft">@null</item> <item name="android:textSelectHandleRight">@null</item> </style>
之后在menu.xml的搜索item中应用该样式:
<item android:id="@+id/action_search" android:icon="@drawable/ic_search_white_48dp_action" android:title="@string/Search" android:visible="true" android:background="@android:color/transparent" app:queryBackground="@android:color/transparent" app:submitBackground="@android:color/transparent" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="always|collapseActionView" app:theme="@style/CustomSearchViewStyle" /> <!-- 新增样式引用 -->
两种方案均可解决白框遮挡问题,按需选择即可。
内容的提问来源于stack exchange,提问作者Gil
相关产品推荐
相关产品推荐

