gpt4 book ai didi

android - 使用 Android 工具栏更改 SearchView 中的 TextColor

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:22 25 4
gpt4 key购买 nike

我有以下问题。我已将 Actionbar 设置为使用工具栏,而不是将 API 21 与 appcompat-v7:21 结合使用。 textColorPrimary 样式标签被配置为使用颜色 @android:color/white,因此新 Android 工具栏中的所有标题都将具有白色文本颜色(到目前为止好)。

现在我添加了一个 SearchView,并为其设置自定义背景,如下所示:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/action_bar_background</item>
<item name="colorPrimaryDark">@color/status_background</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="searchViewStyle">@style/SearchViewStyle</item>
</style>

<style name="SearchViewStyle" parent="Widget.AppCompat.SearchView">
<item name="queryBackground">@drawable/search_background</item>
<item name="searchIcon">@drawable/icon_search</item>
</style>

drawable @drawable/search_background 是一个纯白色的矩形。所以你猜怎么着?由于 Toolbar 中的标题文本颜色是白色,现在 SearchView 中的文本颜色也是白色,并且由于 SearchView 背景是白色矩形,用户看不到他正在输入的内容。

我的问题是:如何为 Android 工具栏标题和 SearchView 文本设置不同的文本颜色?

最佳答案

经过一些研究,我找到了一种安全的方法。

深入研究 SearchView 样式,我找到了用于显示 SearchView 的布局。在该布局中有一个 TextView(您在 SearchView 中键入的实际字段)

<TextView
android:id="@+id/search_badge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_marginBottom="2dip"
android:drawablePadding="0dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone" />

注意字段 android:textColor="?android:attr/textColorPrimary"。这导致了我最初遇到的问题,SearchView 中的文本颜色与为 Android 工具栏中的标题文本颜色定义的颜色相同。

现在有几种可能有效的解决方案 here ,但我认为大多数这些解决方案都有同样的问题。它们都依赖于 TextView 的 ID 来访问 View 和更改文本颜色,如所述 here

我个人认为在代码中硬编码 TextView 的 id 是非常危险的,因为我们不知道明天 Google 是否决定为此 View 使用另一个 id 值,在那种情况下,我们的代码将被破坏。

出于这个原因,我创建了一个递归方法来获取 SearchView 中的 TextView 对象,并将颜色更改为我们想要的任何颜色。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.search, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();

searchView.setOnQueryTextListener(new SearchTextListener());
changeSearchViewTextColor(searchView);
}


private void changeSearchViewTextColor(View view) {
if (view != null) {
if (view instanceof TextView) {
((TextView) view).setTextColor(Color.BLACK);
return;
} else if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
changeSearchViewTextColor(viewGroup.getChildAt(i));
}
}
}
}

我已经使用 API 21 和工具栏测试了这段代码,将工具栏标题文本颜色设置为白色,并将 SearchView 文本颜色设置为黑色,并且效果很好。此外,当我们直接访问 TextView 对象时,我们可以更改提示、可绘制对象、填充以及与 TextView 相关的所有内容。

关于android - 使用 Android 工具栏更改 SearchView 中的 TextColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27156680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com