大家好,又见面了,我是你们的朋友全栈君。
我认为将属性声明为不是风格,只有以下区别。
在attrs.xml中,您可以直接在“资源”部分内或在“declare-styleable”中声明自定义属性:
所以现在我们将“attrib1”定义为不风格,“attrib2”为风格。
在layout / someactivity.xml中,我们可以直接使用这些属性(不需要命名空间):
您可以在style.xml声明中使用“styleable”属性“attrib2”。再次,这里不需要命名空间(即使在布局XML中使用了命名空间)。
text value
@color/white
然后您还可以设置每个样式的属性。
让我们假设我们这样做:我们将attrib1直接设置在XML中,我们将attrib2设置为一个样式。
在其他地方,我已经看到说明“blahblah”必须是使用这些属性的自定义视图类的名称,并且您需要使用命名空间来引用布局XML中的自定义属性。但似乎没有必要。
风格与非风格之间的区别似乎是:
>您可以在“style.xml”声明中使用样式属性。
>自定义类的构造函数需要以不同的方式读取样式和非样式的属性:使用getsStyledAttributes()的样式属性,以及具有attr.getAttributeValue()或类似属性的非风格属性。
在我在Web上看到的大多数教程和示例中,只使用了getsStyledAttributes()。但是,这不适用于直接在布局中声明的属性,而不使用样式。如果您在大多数教程中都显示了获取StyledAttributes()的方法,那么根本不会得到属性attrib1;你只会得到attrib2,因为它被宣布为风格。使用attr.getAttributeValue()的直接方法有效:
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
String attrib1 = attrs.getAttributeValue(null, “attrib1”);
// do something with this value
}
由于我们没有使用命名空间来声明“attrib1”,所以我们作为getAttributeValue()中的namespace参数传递null。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159297.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...