1

在自定义视图中,我可以从 AttributeSet 中获取自定义 attrs 值(如下所示)。但是如何获取 Android 属性呢?例如,我如何访问 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");
4

2 回答 2

10

我想我们会这样做:

final String xmlns="http://schemas.android.com/apk/res/android";
int xmlRes = attrs.getAttributeResourceValue(xmlns, "background", -1);
String xmlText = attrs.getAttributeValue(xmlns, "text");
于 2012-11-24T09:37:17.797 回答
0

正如评论中提到的,这不是做到这一点的规范方法。此外,这实际上仅适用于硬编码字符串。Preference 类的 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;
                 ...
             }
于 2014-11-07T19:09:54.360 回答