- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下问题。我已将 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/
如果我的问题看起来很新手,我很抱歉,textColor 和 android:textColor 有什么区别?我不明白在哪里使用哪个感谢您的帮助 最佳答案 textColor 是 AppCompat 库
我一直想知道这个问题。 构建 XML 时 Android布局,我们可以定义一个TextView使用 RGB 十六进制代码或来自 color.xml 的颜色值的文本颜色文件。 android:textC
Android searchview 有默认的 queryhint textcolor 和 text color 。我们如何使用 AndroidX 在 Android Searchview 中更改 e
我只是想将我的文本文本字段设置为与详细文本标签颜色相同的颜色,这似乎是正确的方法,在这里看到了一些提供此答案的内容,但我收到了错误,有什么想法吗? txtPassword.textColor = ce
我遇到的问题是我无法在以下 javascript 表单中设置两种不同的文本颜色(通过 css 类)。标准类是灰色(灰色文本颜色),但是一旦有人点击“在此处输入您的邮件”,要输入的电子邮件颜色文本应该是
如何将用户输入的颜色传递给 conio.h 中的 textcolor() 函数? textcolor(BLUE); cprintf("Hello"); 工作正常,但是 char c[20]; gets
我是安卓新手。在这上面花了 3 天之后,我无法弄清楚。 android:textColor= 在 TextView 上,但它不会改变颜色。我可以更改所有其他值,但不能更改 textColor。 最佳答
我的应用程序中有一个 Edittext。我在 XML 中以下列方式将其默认颜色设置为黑色: android:textColor="@android:color/black" 布局:
我只是想使用这段代码更改我的回收 View 中的文本颜色 ↓↓↓ itemView.resultTV.textColor = if (result >= 0) R.color.green else R
如何在禁用控件时更改文本的颜色。我想在 C# winforms 中禁用控件时设置不同的颜色。 最佳答案 编辑:我在评论中犯了与 Cody 相同的错误,因此更正了我的答案。 要看是哪个控件。 例如,如果
在flutter和我的应用程序中,我尝试不使用FlatButton来更改一些ThemeData文本颜色,因为在应用程序的某些部分中,我希望按钮具有白色或红色文本, 我如何正常设置此文本颜色? 例如:
对于我的 uipickerview,我有: - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row fo
我有这样的布局。这里我将 textColor 设置为红色。 当我在模拟器上运行它时,一切都按预期工作。但是,当我在设备上运行时,textColor 是白色的。它曾经在设备上工作。 我用模拟器做了很多代
我在使用标准 android Switch 组件时遇到了一个奇怪的问题。 我已经分配了我的自定义跟踪器和拇指可绘制对象 - 一切看起来和工作正常,除了 textColor 属性的颜色始终是深色(可能是
我编写了一个依赖资源中定义的颜色的应用程序。有些是直接在布局 XML 文件中设置的,有些是在代码中设置的。示例: res/values/styles.xml 中的颜色定义: #33B5E5 布局:
我的应用程序中有几个按钮,我想为所有按钮应用一种样式。 以下是我放在 values 文件夹中的 styles.xml 文件。 bold #282780
我一直在研究在用 C 编写的 DOS 程序中使用颜色。有人告诉我 conio.h 具有 textcolor() 函数,但是当我在我的代码中使用它时,编译器/链接器抛出错误提示我有一个未定义的函数引用。
我正在做一些教程,我尝试尝试使用 textColor。使用每个 Widget 中的属性、布局 xml 或样式属性,这可以很好地工作。但我想知道是否可以定义一个全局 textColor,据我所知是不可能
我正在尝试将通过代码创建的 ColorStateList 应用为 TextView 的 TextColor。问题是,如果我使用在 xml 中定义的 ColorStateList,它会起作用,但当我通过
我设法在我的代码中使用了一个 spinner 并且想通过那个 spinner 改变 MainActivity 文件中某个文本的 textColor,但是他位于另一个类文件 - Einstellunge
我是一名优秀的程序员,十分优秀!