Android-AttributeSet详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android-AttributeSet详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3857字,纯文字阅读大概需要6分钟。
内容图文
public interface AttributeSet { /* * * Returns the number of attributes available in the set. * * @return A positive integer, or 0 if the set is empty. */ public int getAttributeCount(); /* * * Returns the name of the specified attribute. * * @param index Index of the desired attribute, 0...count-1. * * @return A String containing the name of the attribute, or null if the * attribute cannot be found. */ public String getAttributeName(int index); /** * Returns the value of the specified attribute as a string representation. * * @param index Index of the desired attribute, 0...count-1. * * @return A String containing the value of the attribute, or null if the * attribute cannot be found. */public String getAttributeValue(int index); /** * Returns the value of the specified attribute as a string representation. * The lookup is performed using the attribute name. * * @param namespace The namespace of the attribute to get the value from. * @param name The name of the attribute to get the value from. * * @return A String containing the value of the attribute, or null if the * attribute cannot be found. */public String getAttributeValue(String namespace, String name);
查看AttributeSet的源码 你会发现它是一个接口 是个什么接口呢?
熟悉XML解析的人知道 在XML解析中是有AttributeSet这个东西的,XML解析根据节点取出节点相对应的数据。
Android中,我们写的布局文件就是XML形式的,所以这就是每次我们自定义View的时候,构造方法有AttributeSet的原因。
SDK给出的解释如下:
A collection of attributes, as found associated with a tag in an XML document. Often you will not want to use thisinterface directly, instead passing it to Resources.Theme.obtainStyledAttributes() which will take care of parsing the attributes for you. In particular, the Resources API will convert resource references (attribute values such as"@string/my_label"in the original XML) to the desired type for you; if you use AttributeSet directly then you will need to manually check for resource references (with getAttributeResourceValue(int, int)) and do the resource lookup yourself if needed. Direct use of AttributeSet also prevents the application of themes and styles when retrieving attribute values. This interface provides an efficient mechanism for retrieving data from compiled XML files, which can be retrieved for a particular XmlPullParser through Xml.asAttributeSet(). Normally this will return an implementation of the interface that works on top of a generic XmlPullParser, however it is more useful in conjunction with compiled XML resources:
那我们自定义View的时候,AttributeSet又是怎么用的呢?
一般情况下,我们是在values下面新建一个attrs文件夹
<declare-styleable name="MyView"> <attr name="textColor" format="color"/> <attr name="textSize" format="dimension"/> </declare-styleable>
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res/com.example.androidtest" android:layout_width="match_parent" android:orientation="vertical" android:background="@android:color/black" android:layout_height="match_parent"> <com.example.androidtest.MyView android:layout_width="fill_parent" android:layout_height="wrap_content" myapp:textColor="#FFFFFFFF" myapp:textSize="62dp" ></com.example.androidtest.MyView> </LinearLayout>
自定义View样例代码:
public class MyView extends TextView { public MyView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView); int textColor = array.getColor(R.styleable.MyView_textColor, 0XFF00FF00); float textSize = array.getDimension(R.styleable.MyView_textSize, 36); setTextColor(textColor); setTextSize(textSize); setText("22222222222"); array.recycle(); } public MyView(Context context) { super(context); // TODO Auto-generated constructor stub }
原文:http://www.cnblogs.com/gongcb/p/3642189.html
内容总结
以上是互联网集市为您收集整理的Android-AttributeSet详解全部内容,希望文章能够帮你解决Android-AttributeSet详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。