android - 从AttributeSet获取Android样式的属性

  显示原文与译文双语对照的内容

在自定义视图中,可以从 AttributeSet ( 显示如下) 获取自定义的attrs值。 但是我怎样才能得到安卓的属性? 例如如何访问 android:background 或者 android:text? 不允许使用 android.R.styleable 。


<mine.custom.RangeSeekBar


 custom:selectedMinValue="2"


 custom:selectedMaxValue="4"


 android:background="@drawable/my_skin"/>



public RangeSeekBar(Context context, AttributeSet attrs, int defStyle) {


TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RangeSeekBar, defStyle, 0);


 selectedMinValue = a.getInt(R.styleable.RangeSeekBar_selectedMinValue, selectedMinValue);


 selectedMaxValue = a.getInt(R.styleable.RangeSeekBar_selectedMaxValue, selectedMaxValue);


 minRangeValue = a.getInt(R.styleable.RangeSeekBar_minRangeValue, minRangeValue);


 maxRangeValue = a.getInt(R.styleable.RangeSeekBar_maxRangeValue, maxRangeValue);


 a.recycle();


}



编辑:这是标准方式?


final String xmlns="http://schemas.android.com/apk/res/android";


 int xmlRes = attrs.getAttributeResourceValue(xmlns,"background", -1);


 String xmlText = attrs.getAttributeValue(xmlns,"text");



时间: 原作者:

我想我们可以用这个


final String xmlns="http://schemas.android.com/apk/res/android";


int xmlRes = attrs.getAttributeResourceValue(xmlns,"background", -1);


String xmlText = attrs.getAttributeValue(xmlns,"text");



原作者:

就像评论中提到的,这不是正确的方法。 此外,这只对硬编码的字符串有效。 来自 android源代码的示例类插件示例可能会帮助:


 TypedArray a = context.obtainStyledAttributes(attrs,


 com.android.internal.R.styleable.Preference, defStyle, 0);


 for (int i = a.getIndexCount(); i> = 0; i--) {


 int attr = a.getIndex(i); 


 switch (attr) {


. . .


 case com.android.internal.R.styleable.Preference_key:


 mKey = a.getString(attr);


 break;


. . .


 }



原作者:
...