Ste*_*han 23 android styles declare-styleable
我已经开始玩我的Android应用程序中的样式等,到目前为止我已经完成了所有工作.我完全理解指南的"风格" 部分.
但是,环顾四周,就像在这个帖子中一样,我无法弄清楚两者之间的区别(declare-stylable和style).从我的理解中declare-styleable获取其中指定的属性并将其指定为可样式,然后从代码中根据需要更改它.
但如果这是它真正的功能,那么在布局中定义属性会不会更简单?或者声明一个指定它的样式?
win*_*zki 62
我认为将属性声明为可样式与否之间只有以下区别.
在attrs.xml中,您可以直接在"resources"部分或"declare-styleable"中声明自定义属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="attrib1" format="string" />
<declare-styleable name="blahblah">
<attr name="attrib2" format="string" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
所以现在我们将"attrib1"定义为非样式,将"attrib2"定义为样式.
在layout/someactivity.xml我们可以直接使用这些属性(不需要命名空间):
<com.custom.ViewClass attrib1="xyz" attrib2="abc"/>
Run Code Online (Sandbox Code Playgroud)
您可以在style.xml声明中使用"styleable"属性"attrib2" .同样,这里不需要命名空间(即使在布局XML中使用了命名空间).
<style name="customstyle" parent="@android:style/Widget.TextView">
<item name="attrib2">text value</item>
<!-- customize other, standard attributes too: -->
<item name="android:textColor">@color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)
然后,您还可以设置每个样式的属性.
<com.custom.CustomView attrib1="xyz" style="@style/customstyle"/>
Run Code Online (Sandbox Code Playgroud)
我们假设我们这样做:我们attrib1直接在XML中设置,并设置attrib2一个样式.
在其他地方,我看到描述声明" blahblah"必须是使用这些属性的自定义视图类的名称,并且您需要使用命名空间来引用布局XML中的自定义属性.但这似乎都不是必要的.
styleable和non-styleable之间的区别似乎是:
style.xml"声明中使用可设置的属性.obtainStyledAttributes(),以及非样式属性attr.getAttributeValue()或类似.在我在网上看到的大多数教程和示例中,只obtainStyledAttributes()使用了它.但是,这不适用于直接在布局中声明的属性,而不使用样式.如果您obtainStyledAttributes()按照大多数教程中所示进行操作,则根本不会获得该属性attrib1; 你只会attrib2在风格中宣布它.使用attr.getAttributeValue()作品的直接方法:
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
String attrib1 = attrs.getAttributeValue(null, "attrib1");
// do something with this value
}
Run Code Online (Sandbox Code Playgroud)
由于我们没有使用命名空间来声明" attrib1",因此我们将其null作为命名空间参数传递getAttributeValue().
| 归档时间: |
|
| 查看次数: |
15957 次 |
| 最近记录: |