Android中AutocompleteSupportFragment提示及选中地点文本颜色修改问题
解决方案
AutocompleteSupportFragment的输入控件由SDK内部封装,直接在外层fragment标签设置android:textColorHint、android:editTextColor属性不会向下传递到内部输入框,可通过以下两种方案修改样式:
方案1:自定义主题覆写样式(推荐,无兼容性风险)
- 在
res/values/styles.xml中添加自定义Places搜索主题:
<style name="CustomPlacesAutocompleteTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 修改提示文字颜色 --> <item name="android:textColorHint">@color/your_custom_hint_color</item> <!-- 修改输入、选中地点后的展示文字颜色 --> <item name="android:textColor">@color/your_custom_text_color</item> <!-- 可选:修改光标、下划线高亮颜色 --> <item name="colorControlActivated">@color/your_custom_highlight_color</item> </style>
- 绑定主题到AutocompleteSupportFragment:
- 若为动态初始化Fragment,调用
setTheme方法指定主题:
// 初始化需要返回的地点字段 val fields = listOf(Place.Field.ID, Place.Field.NAME, Place.Field.ADDRESS) val autocompleteFragment = AutocompleteSupportFragment.newInstance( AutocompleteActivityMode.OVERLAY, fields ).apply { setTheme(R.style.CustomPlacesAutocompleteTheme) // 其余初始化逻辑:设置地点过滤、选择回调等 }
- 若为XML布局引入Fragment,直接添加
android:theme属性:
<fragment android:id="@+id/autocomplete_fragment" android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/CustomPlacesAutocompleteTheme" />
方案2:直接修改内部EditText属性(兜底方案)
如果主题覆写不生效,可通过SDK公开的资源ID直接获取内部输入控件修改属性:
autocompleteFragment.view?.findViewById<EditText>( com.google.android.libraries.places.R.id.places_autocomplete_search_input )?.let { searchInput -> // 修改提示文字颜色 searchInput.setHintTextColor(ContextCompat.getColor(requireContext(), R.color.your_custom_hint_color)) // 修改输入、选中后展示文字颜色 searchInput.setTextColor(ContextCompat.getColor(requireContext(), R.color.your_custom_text_color)) }
注意事项
- 请将Places SDK升级到最新稳定版,旧版本可能存在主题适配bug
- 方案2使用的
places_autocomplete_search_input为SDK公开资源ID,不会被混淆

内容的提问来源于stack exchange,提问作者chitgoks
相关产品推荐
相关产品推荐

