Gia*_*nzi 9 android attr declare-styleable
我正在阅读初学Android 4开发,在第5章中它讨论了Gallery和ImageVievs,并介绍了声明式样式的 XML标签,但没有解释其目的.我试图在参考上找到一些信息,没有运气..例如我们有以下内容:
RES /值/ attrs.xml
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<declare-styleable name=”Gallery1”>
<attr name=”android:galleryItemBackground” />
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
example.java
public class GalleryActivity extends Activity {
[...]
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
[...]
}
[...]
public class ImageAdapter extends BaseAdapter {
[...]
int itemBackground;
public ImageAdapter(Context c) {
context = c;
//---setting the style---
TypedArray a = obtainStyledAttributes(
R.styleable.Gallery1);
itemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
[...]
imageView.setBackgroundResource(itemBackground);
return imageView;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我读过的代码几次,我真的不明白定义此设置样式的目的Gallery1用单ATTR孩子只有一个名字属性..你能帮助我吗?这个galleryItemBackground是由系统提供的还是由我们定义的东西?我们在这段代码中做了什么?
预先感谢您的任何帮助!
hap*_*ude 14
此标记是定义的一组预制Android属性的一部分R.Styleable,可以android:在属性名称之前从xml名称空间前缀的自定义样式标记中进行分析.
此特定属性描述为:
图库项目的首选背景.这应该设置为您从适配器提供的任何视图的背景.
但是,您是对的,自定义属性标记不仅需要属性的名称,还需要其类型,例如向attrs.xml文件添加自定义元素可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name=”android:galleryItemBackground” />
<attr name="myCustomAttr" format="string" />
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
请注意android:第二个属性上缺少命名空间.
编辑:
是否有任何官方文档页面深入解释这个Styleables?
查看R.attr(点击链接)获取Android中包含的各种属性.您不需要为它们声明类型,因为它们都已声明.要知道为特定属性声明了什么类型,请找到您感兴趣的类型的描述. galleryItemBackground正如您所料,是对另一个资源的引用; 其他可能性是布尔,浮标,颜色等.
其他参考:Andtoid使用<declare-styleable>标签创建AttributeSet.TypedArray用于解析AttributeSet.
如果上面代码的目的只是获取视图背景的默认Drawable,我不能用getDrawable(android.R.attr.galleryItemBackground)设置变量itemBackground吗?
在该示例中,当只有一个属性时,很难看到此模式的有用性.你可以做你想要的,也可能更容易.然而,该构造是Android的口头禅的一部分,它通过让您在xml中设置某些属性而不必在代码中执行所有操作来将UI的"外观"与其"功能"分开.以View上课为例.它有30多个属性可以在xml文件中设置(大小,填充,可点击,可聚焦等); 制作自定义子类的人View可以在xml中设置一些,全部或不设置这些属性,并在创建视图时自动为您处理它们.如果需要,可以使用相应的代码来设置属性,但想象一下,每次子类化时,View您都需要在代码中设置所有属性,而不是在xml中设置它们.
为类完全相同的事情创建自己的资源也是一件小事,但是如果不覆盖它们,使用内置样式将提供与Android框架的外观相匹配的默认资源.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
10934 次 |
| 最近记录: |