textview中文本的默认颜色是什么?


Answers:


87

您可以保存旧颜色,然后使用它恢复原始值。这是一个例子:

ColorStateList oldColors =  textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors

但是通常默认的TextView文字颜色是由当前应用于您的主题确定的Activity


最正确的解决方案。保留文本颜色状态(已禁用等)
dasar

根据我的观察,主题定义的文本颜色不是从代码动态添加的TextView继承的。无论主题是深色还是浅色,它始终以白色显示。
shiouming

1
@shiouming取决于所使用的上下文。每个构造函数都使用一个上下文,并且在该上下文中设置了一个主题(通常是默认设置)。如果需要,请使用TextView(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes)
Bonatti

109

实际上,颜色TextView是:

android:textColor="@android:color/tab_indicator_text"

要么

#808080

4
这是默认的标签指示符文本颜色。在许多情况下,它可能与默认文本颜色相同,但我不会依赖它。
k2col

6
非常接近,但是这种颜色不一样。
LukaszTaraszka '17

2
@LukTar是正确的,我用过Photoshop并检查了颜色...#737373是在android studio中从一个点像素样本(一个像素的样本区域大小)上的textview文本颜色放大到1000%的视图...我认为您需要查看应用程序的默认样式,以获取任何特定应用程序的实际值,但是……
me_

40

在中定义了一些默认颜色 android.R.color

int c = getResources().getColor(android.R.color.primary_text_dark);

4
它应该int c = ...代替Color c = ...
Kevin Cruijssen 2014年

7
从API level23开始,getResources().getColor(int id)现已弃用(请参阅链接)。你要么可以使用 getResources().getColor (int id, Resources.Theme theme)ContextCompat.getColor(contex, android.R.color.primary_text_dark)
InfectedPacket

primary_text_dark现在已被弃用,但不知道为什么:(
Impulse The Fox

15

从属性获取这些值:

int[] attrs = new int[] { android.R.attr.textColorSecondary };
TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, attrs);
DEFAULT_TEXT_COLOR = a.getColor(0, Color.RED);
a.recycle();

看起来它将根据主题正确选择颜色,并且例如在应用程序处于夜间模式时会进行更新。
Brill Pappin 2015年

要获取当前主题的TypedArray,请在不使用主题arg的情况下调用它:TypedArray a = getTheme()。obtainStyledAttributes(attrs);
彼得森2013年

仅当主题实际使用textColorSecondary时,才会获得适当的颜色。由于可以在主题或样式中覆盖此内容,因此这不是确定特定视图的默认文本颜色实际是什么的非常准确的方法。还请注意,现在可以将各个视图设为主题,因此应使用与视图上下文关联的主题,而不是假设活动的主题对其所有视图都有效。
罗恩·拉里伯特

6

如果您未指定文字颜色,则Android使用的主题有默认值。在各种Android用户界面(例如HTC Sense,三星TouchWiz等)中,颜色可能不同。Android具有_dark_light主题,因此这些主题的默认值有所不同(但在香草android中,两者的默认值都接近黑色)。但是,最好自行定义您的主要文字颜色,以在整个设备中提供一致的样式。

在代码中:

getResources().getColor(android.R.color.primary_text_dark);
getResources().getColor(android.R.color.primary_text_light);

在xml中:

android:color="@android:color/primary_text_dark"
android:color="@android:color/primary_text_light"

自API v1起,深色主题文本颜色为#060001浅色主题,浅色主题中为浅色主题,作为香草Android中的参考#060003在这里查看android样式类


您上一个链接中引用的颜色实际上根本不是颜色,它们只是用于查找颜色的android.R值。您可以通过在此目录中查找颜色并在此.xml文件中查找基础颜色引用来查找默认颜色。
Alex Gittemeier '19年



2

在所有情况下都可能无法实现,但是为什么不简单地使用存在于同一Activity中并带有您要寻找的颜色的另一个随机TextView的值呢?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

0

没有默认颜色。这意味着每个设备都可以拥有自己的设备。


7
没有默认颜色,只是每个android发行版都可以覆盖它们
Patrick Favre

@ for3st您知道他们确实改变过的情况吗?
Android开发人员


0

嘿,你可以试试这个

ColorStateList colorStateList = textView.getTextColors();
String hexColor = String.format("#%06X", (0xFFFFFF & colorStateList.getDefaultColor()));

0

我发现它android:textColor="@android:color/secondary_text_dark"提供了比默认TextView颜色更接近的结果android:textColor="@android:color/tab_indicator_text"。我想您必须根据要使用的主题在secondary_text_dark / light之间切换


0

您可以在更改之前使用TextView.setTag / getTag存储原始颜色。我建议在ids.xml中创建一个唯一的id资源,以区分其他标记(如果有)。

设置为其他颜色之前:

if (textView.getTag(R.id.txt_default_color) == null) {
    textView.setTag(R.id.txt_default_color, textView.currentTextColor)
}

改回来:

textView.getTag(R.id.txt_default_color) as? Int then {
    textView.setTextColor(this)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.