SearchView元素没有更改文本颜色的任何属性。默认文本颜色是黑色,不适用于我们的深色背景。有没有一种方法可以更改文本颜色,而不必诉诸hack?
我发现了一个类似的问题,与更改文本大小有关,但到目前为止,它还没有任何答案:如何设置SearchView TextSize?
SearchView元素没有更改文本颜色的任何属性。默认文本颜色是黑色,不适用于我们的深色背景。有没有一种方法可以更改文本颜色,而不必诉诸hack?
我发现了一个类似的问题,与更改文本大小有关,但到目前为止,它还没有任何答案:如何设置SearchView TextSize?
添加
<item name="android:editTextColor">@android:color/white</item>
修改父主题文件可以更改输入的文本。您也可以使用
<item name="android:textColorHint">@android:color/white</item>
更改SearchView中提示文本的颜色。(请注意,您可以将@android:color/white
替换为任何适当的值)
EditText
的文本颜色。目前为止唯一一个能够仅改变 SearchView
文本颜色并且对我有用的解决方案在这里:https://dev59.com/eFoU5IYBdhLWcg3wvIqp#40550067。 - ban-geoengineeringint id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
searchView.findViewById<TextView>(androidx.appcompat.R.id.search_src_text)
来查找 TextView。 - René Jörg Spies这对我有效。
SearchView searchView = (SearchView) findViewById(R.id.search);
EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
EditText txtSearch = ((EditText)searchView.findViewById(androidx.appcompat.R.id.search_src_text));
txtSearch.setHint(getResources().getString(R.string.search_hint));
txtSearch.setHintTextColor(Color.LTGRAY);
txtSearch.setTextColor(Color.WHITE);
改变操作栏搜索视图提示文本颜色给出了另一个解决方案。它可以工作,但仅设置提示文本和颜色。
searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
androidx.appcompat.R.id.search_src_text
。 - CzarMatt我想做类似的事情。最终我不得不在SearchView
的子项中找到TextView
:
for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
textView.setTextColor(Color.WHITE);
}
如果您需要util方法:
public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) {
return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>());
}
private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) {
for (int i = 0; i < viewGroup.getChildCount(); i++)
{
final View child = viewGroup.getChildAt(i);
if (clazz.isAssignableFrom(child.getClass())) {
childrenFound.add((V)child);
}
if (child instanceof ViewGroup) {
gatherChildrenByClass((ViewGroup) child, clazz, childrenFound);
}
}
return childrenFound;
}
您可以在View中使用android:theme
属性来覆盖默认颜色。
如果您正在使用Toolbar
或MaterialToolbar
:
<com.google.android.material.appbar.MaterialToolbar
android:theme="@style/ThemeOverlay.Toobar"
...>
或者:<androidx.appcompat.widget.Toolbar
android:theme="@style/ThemeOverlay.Toobar"
...>
当主题与Material组件主题叠加时:
<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
<!-- Text color -->
<item name="android:editTextColor">@color/....</item>
<!-- Hint text color -->
<item name="android:textColorHint">@color/...</item>
</style>
使用AppCompat主题:
<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.AppCompat.Light.*">
<!-- Text color -->
<item name="android:editTextColor">@color/....</item>
<!-- Hint text color -->
<item name="android:textColorHint">@color/...</item>
</style>
如果你在你的布局中使用了一个 SearchView
,你可以做类似的事情:
<androidx.appcompat.widget.SearchView
android:theme="@style/ThemeOverlay.SearchView"
与
<style name="ThemeOverlay.SearchView" parent="">
<!-- Text color -->
<item name="android:editTextColor">@color/...</item>
<!-- Hint text color -->
<item name="android:textColorHint">@color/...</item>
</style>
editTextColor
属性来实现。<style name="SearchViewStyle" parent="Some.Relevant.Parent">
<item name="android:editTextColor">@color/some_color</item>
</style>
然后你可以将这个样式应用到布局中的 Toolbar
或 SearchView
。
<android.support.v7.widget.Toolbar
android:theme="@style/SearchViewStyle">
<android.support.v7.widget.SearchView />
</android.support.v7.widget.Toolbar>
通过自定义样式可以最好地实现这一点。使用自己的自定义样式重载操作栏小部件样式。对于深色操作栏的 Holo Light 主题,请将以下代码放在您自己的样式文件(如 res/values/styles_mytheme.xml
)中:
<style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
<!-- your other custom styles -->
</style>
<style name="Theme.MyTheme.Widget" parent="@android:style/Theme.Holo">
<item name="android:textColorHint">@android:color/white</item>
<!-- your other custom widget styles -->
</style>
请确保您的应用程序使用如链接所述的自定义主题。
如果您使用的是 - android.support.v7.widget.SearchView
SearchView searchView = (SearchView) item.getActionView();
EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editText.setTextColor(Color.WHITE);
val searchView = SearchView(this)
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.setTextColor(Color.WHITE)
现在你应该开始使用androidx支持库。
工具栏
的样式。<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="android:editTextColor">@color/some_color</item>
</style>
将其设置为工具栏
的主题。
<android.support.v7.widget.Toolbar
android:theme="@style/AppTheme.Toolbar"
...