gpt4 book ai didi

android - 以编程方式访问 Android 中的主题/样式/属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:34 24 4
gpt4 key购买 nike

我想访问编译到我的 apk 中的复杂资源(“包资源”)。比如获取当前主题的所有属性,最好是我可以遍历的xml。

可以使用 obtainStyledAttributes() 访问主题/样式,但需要提前了解属性。有没有办法获取样式中存在的属性列表?

例如,在这样的主题中:

<style name="BrowserTheme" parent="@android:Theme.Black">
<item name="android:windowBackground">@color/white</item>
<item name="android:colorBackground">#FFFFFFFF</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

如何在事先不知道项目名称的情况下访问这些项目?

另一个示例是 attrs.xml,其中一些属性具有枚举或标志,例如:

<attr name="configChanges">
<flag name="mcc" value="0x00000001" />
<flag name="mnc" value="0x00000002" />
...
</attr>

应用程序如何在不知道其名称的情况下获取这些标志?

最佳答案

代替 Theme.obtainStyledAttributes(...)Resources.obtainTypedArray(int) 可用于访问样式的所有属性,而无需指定您对哪些属性感兴趣。

然后您可以访问 TypedArray 的元素以查找每个属性的资源 ID/类型/值。

TypedArray array = getResources().obtainTypedArray(
R.style.NameOfStyle);

for (int i = 0; i < array.length(); ++i) {

TypedValue value = new TypedValue();
array.getValue(i, value);

int id = value.resourceId;

switch (value.type) {
case TypedValue.TYPE_INT_COLOR_ARGB4:
// process color.
break;

// handle other types
}
}

关于android - 以编程方式访问 Android 中的主题/样式/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320289/

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