如何获取自定义属性(attrs.xml)的值?
How to get the value of a custom attribute (attrs.xml)?
我在 attrs.xml 上声明了这个属性:
<resources>
<attr name="customColorPrimary" format="color" value="#076B07"/>
</resources>
我需要获取它的值,它应该是“#076B07”,但我得到的是一个整数:“2130771968”
我正在以这种方式访问值:
int color = R.attr.customColorFontContent;
是否有正确的方法来获取该属性的真实值?
谢谢
不,这不是正确的方法,因为整数 R.attr.customColorFontContent
是编译应用程序时由 Android Studio 生成的资源标识符。
相反,您需要从主题中获取与属性关联的颜色。使用以下 class 来执行此操作:
public class ThemeUtils {
private static final int[] TEMP_ARRAY = new int[1];
public static int getThemeAttrColor(Context context, int attr) {
TEMP_ARRAY[0] = attr;
TypedArray a = context.obtainStyledAttributes(null, TEMP_ARRAY);
try {
return a.getColor(0, 0);
} finally {
a.recycle();
}
}
}
然后您可以像这样使用它:
ThemeUtils.getThemeAttrColor(context, R.attr.customColorFontContent);
您应该按如下方式访问 color
属性:
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0);
try {
color = ta.getColor(R.styleable.MyCustomView_customColorPrimary, android.R.color.white); //WHITE IS THE DEFAULT COLOR
} finally {
ta.recycle();
}
...
}
我在 attrs.xml 上声明了这个属性:
<resources>
<attr name="customColorPrimary" format="color" value="#076B07"/>
</resources>
我需要获取它的值,它应该是“#076B07”,但我得到的是一个整数:“2130771968”
我正在以这种方式访问值:
int color = R.attr.customColorFontContent;
是否有正确的方法来获取该属性的真实值?
谢谢
不,这不是正确的方法,因为整数 R.attr.customColorFontContent
是编译应用程序时由 Android Studio 生成的资源标识符。
相反,您需要从主题中获取与属性关联的颜色。使用以下 class 来执行此操作:
public class ThemeUtils {
private static final int[] TEMP_ARRAY = new int[1];
public static int getThemeAttrColor(Context context, int attr) {
TEMP_ARRAY[0] = attr;
TypedArray a = context.obtainStyledAttributes(null, TEMP_ARRAY);
try {
return a.getColor(0, 0);
} finally {
a.recycle();
}
}
}
然后您可以像这样使用它:
ThemeUtils.getThemeAttrColor(context, R.attr.customColorFontContent);
您应该按如下方式访问 color
属性:
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0);
try {
color = ta.getColor(R.styleable.MyCustomView_customColorPrimary, android.R.color.white); //WHITE IS THE DEFAULT COLOR
} finally {
ta.recycle();
}
...
}