Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从xml中读取android样式会得到不同的结果_Android_Android Styles - Fatal编程技术网

从xml中读取android样式会得到不同的结果

从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}).

例如,我有这样的样式,它在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}).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