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

116

我将颜色设置为红色,现在我想将颜色重新设置回默认值,但是我不知道默认颜色是什么,有人知道吗?

15个回答

139

实际上,“color TextView”是:

android:textColor="@android:color/tab_indicator_text"
或者
#808080

5
这是默认的选项卡指示器文本颜色。在许多情况下,它可能与默认文本颜色相同,但我不会依赖于它。 - k2col
8
非常接近,但这个颜色不一样。 - LukaszTaraszka
2
@LukTar是正确的,我使用了Photoshop并检查了颜色... #737373是从Android Studio中缩放到1000%的视图上进行点像素采样(采样区域大小为一个像素)得出的textview文本颜色... 我认为您需要查看应用程序的默认样式以获取任何特定应用程序的实际值... - me_
此外,在marshmallow中不存在。 - Jagar

103

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

ColorStateList oldColors =  textView.getTextColors(); //save original colors
textView.setTextColor(Color.RED);
....
textView.setTextColor(oldColors);//restore original colors
但是通常情况下,TextView 的默认文本颜色是由当前应用于您的Activity的主题确定的。

最正确的解决方案。保留文本颜色状态(禁用等)。 - dasar
根据我的观察,从代码动态添加的TextView并不会继承主题定义的文本颜色。无论是暗色或亮色主题,它总是以白色显示。 - shiouming
2
@shiouming,取决于使用的上下文。每个构造函数都使用一个上下文,在该上下文中设置了一个主题(通常是默认值)。如果需要,可以使用[TextView(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes)](https://developer.android.com/reference/android/widget/TextView.html#TextView(android.content.Context,%20android.util.AttributeSet,%20int,%20int)) - Bonatti
但是!例如更改主题后,oldColors仍然是旧主题的颜色-因此这不是完全有效的解决方案。作为替代方案:您可以将不可见的TextView添加到布局中,并从中获取默认文本颜色。 - Vitaly

41

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

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

4
应该使用int c = ...而不是Color c = ... - Kevin Cruijssen
7
从API level23开始,getResources().getColor(int id)已经被弃用(详见链接)。您可以使用getResources().getColor (int id, Resources.Theme theme)ContextCompat.getColor(contex, android.R.color.primary_text_dark) - InfectedPacket
1
primary_text_dark现在已经被弃用了,但不知道为什么 :( - Impulse The Fox

18

从属性中获取这些值:

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
要获取当前主题的TypedArray,请在不使用Theme参数的情况下调用它:TypedArray a = getTheme().obtainStyledAttributes(attrs); - petrsyn
1
只有当主题实际上使用textColorSecondary时,才会获得适当的颜色。由于可以在主题或样式中覆盖此设置,因此这不是确定特定视图的默认文本颜色的非常准确的方法。还要注意,现在可以为单个视图设置主题,因此应该使用与视图上下文相关联的主题,而不是假定活动的主题对其所有视图都有效。 - Lorne Laliberte

11

如果您没有指定文本颜色,Android主题中会有默认值。在不同的Android用户界面(例如HTC Sense、Samsung 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"

在原生的Android中,深色主题文本颜色为#060001,浅色主题文本颜色为#060003 自API v1起。在此处查看android风格类


你最后参考链接中的颜色实际上并不是真正的颜色,它们只是 android.R 值,用于查找颜色。你可以通过在 此目录 中找到颜色并在 此 .xml 文件 中查找基本颜色引用以查找默认颜色。 - Alex Gittemeier

9

我知道这很老套,但根据我的默认浅色主题的主题编辑器,默认

textPrimaryColor = #000000

textColorPrimaryDark = #757575

5

我在textview上使用了一个取色器,获取到的颜色是 #757575


5

在某些情况下可能不可行,但为什么不直接使用同一Activity中存在的另一个随机TextView的值,它携带了您要查找的颜色呢?

txtOk.setTextColor(txtSomeOtherText.getCurrentTextColor());

这是最安全的方式。 - Jagar

2
TextView中的文本颜色完全取决于你的主题。最简单的方法是:
  1. 在任何xml文件中添加一个TextView
  2. 选择TextView
  3. 点击Split视图
  4. 打开Attributes选项卡并滚动到颜色部分。

enter image description here

如你所见,根据我的主题它是:@android:color/secondary_text_material_light

你知道如何将它更改为 primary_text 吗? - user2872856
@user2872856,您可以通过在主题中进行更改来实现此操作。 - Salam El-Banna

1

应用程序的主题中定义了一些默认颜色。以下是您可以使用的代码片段,以编程方式获取当前默认颜色。

protected int getDefaultTextColor(){
        TextView textView = new TextView(getContext());
        return textView.getCurrentTextColor();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接