从xml中读取android样式会得到不同的结果
例如,我有这样的样式,它在values/styles.xml中定义从xml中读取android样式会得到不同的结果,android,android-styles,Android,Android Styles,例如,我有这样的样式,它在values/styles.xml中定义 <style name="subheader"> <item name="android:padding">10dp</item> </style> 全部正常,值等于“10dip”。但当我读到这样的价值观时 theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.padding}).
<style name="subheader">
<item name="android:padding">10dp</item>
</style>
全部正常,值等于“10dip”。但当我读到这样的价值观时
theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.padding}).getString(0)
theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.color, android.R.attr.padding}).getString(1)
问题是,值为null。为什么会这样?如何读取此值
另外,我需要阅读任何样式的所有值。我不知道“项目”在样式中没有定义
p.S.S.更复杂的例子
<style name="subheader">
<item name="android:background">#DAE5E9</item>
<item name="android:layout_margin">10dp</item>
<item name="android:padding">10dp</item>
</style>
是
结果
theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.background, android.R.attr.layout_margin, android.R.attr.padding})
theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.background, android.R.attr.layout_margin, android.R.attr.colorBackground, android.R.attr.padding})
是
我假设返回的TypedArray只包含在样式中找到的属性。您的样式中未定义android.R.attr.color,因此返回的TypedArray只能包含1个元素。您是否尝试在第二个代码段上打印“getString(0)”?另外,要检查属性是否存在,您可以使用resolveAttribute(如果不存在则返回false)dqms,getString(0)也等于null。我编辑了我的问题,并添加了更复杂的示例。当遇到第一个未定义的属性时,返回的TypedArray似乎不再填充结果。“不是很干净”的解决方案是尝试通过resolveAttribute单独访问每个属性,以确保它存在。
theme.obtainStyledAttributes(R.style.subheader, new int[]{android.R.attr.background, android.R.attr.layout_margin, android.R.attr.colorBackground, android.R.attr.padding})
0:#DAE5E9
1:10dip
2:null
3:null