有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自资源的java意外颜色值。主题分解属性

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TypedValue color = new TypedValue();
    getTheme().resolveAttribute(安卓.R.attr.textColorSecondary, color, true);
    Toast.makeText(this, String.format("%x", color.data), Toast.LENGTH_LONG).show();
}

这段代码应该制作一个显示次要文本颜色的祝酒词。如果我把它放在我以前的一个应用程序中,它会像预期的那样显示ffaaaaaa。如果我制作一个新的应用程序,同样的代码会显示a07。这显然是错误的;如果我尝试使用它作为颜色,我会看到不可见的视图,因为第一个字节(alpha)是0。这是怎么回事

两个应用程序都使用:

compileSdkVersion 29
buildToolsVersion '29.0.2'
minSdkVersion 21
targetSdkVersion 29

编辑:
我试着在另一部手机上运行新的应用程序,结果显示aaa。这很有趣,因为颜色#aaa相当于#ffaaaaaa。TypedValue有一个type字段,在新应用程序(value=0xaaa)上是TYPE_字符串,但在旧应用程序(value=0xffaaaaa)上是TYPE_INT_COLOR_RGB4。似乎新的应用程序正在将值解释为字符串而不是颜色。现在我知道出了什么问题,但不知道为什么,也不知道该怎么办


共 (1) 个答案

  1. # 1 楼答案

    这不是我所希望的解决方案,但如果我手动将textColorSecondary设置为我的应用程序的样式,并确保使用活动上下文而不是应用程序上下文检索它,它会按预期工作

    风格。xml:

    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        ...
        <item name="android:textColorSecondary">@color/text_secondary</item>
    </style>