Android之AttributeSet案例详解

 更新时间:2021年08月27日 14:38:21   作者:暗殇  
这篇文章主要介绍了Android之AttributeSet案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
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 this interface 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
    }

到此这篇关于Android之AttributeSet案例详解的文章就介绍到这了,更多相关Android之AttributeSet内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android编程之软件的安装和卸载方法

    Android编程之软件的安装和卸载方法

    这篇文章主要介绍了Android编程之软件的安装和卸载方法,涉及Android编程实现软件的安装、权限修改及卸载的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • Android中封装SDK时常用的注解总结

    Android中封装SDK时常用的注解总结

    这篇文章主要给大家总结了在Android中封装SDK时常用的注解的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Android开发中下拉刷新如何实现

    Android开发中下拉刷新如何实现

    这篇文章主要为大家详细介绍了Android开发中下拉刷新的实现方法,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android编程自定义AlertDialog样式的方法详解

    Android编程自定义AlertDialog样式的方法详解

    这篇文章主要介绍了Android编程自定义AlertDialog样式的方法,结合实例形式详细分析了Android自定义AlertDialog样式的具体布局与功能实现相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Android使用DatePickerDialog显示时间

    Android使用DatePickerDialog显示时间

    本文将结合实例代码,介绍Android使用DatePickerDialog显示时间,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • android studio 3.6 中配置svn的教程

    android studio 3.6 中配置svn的教程

    这篇文章主要介绍了android studio 3.6 配置svn的教程,本文所用的as版本是3.6.1,通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • android开发教程之间隔执行程序(android计时器)

    android开发教程之间隔执行程序(android计时器)

    android开发中有些情况需要隔一段时间去执行某个操作一次或者是每隔一段时间久执行某个操作,下面是实现方法
    2014-02-02
  • 详解Flutter中key的正确使用方式

    详解Flutter中key的正确使用方式

    这篇文章主要为大家介绍了详解Flutter中key的正确使用方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 浅析Android中getWidth()和getMeasuredWidth()的区别

    浅析Android中getWidth()和getMeasuredWidth()的区别

    这篇文章主要介绍了浅析Android中getWidth()和getMeasuredWidth()的区别 ,getMeasuredWidth()获取的是view原始的大小,getWidth()获取的是这个view最终显示的大小,具体区别介绍大家参考下本文
    2018-04-04
  • android使用handler ui线程和子线程通讯更新ui示例

    android使用handler ui线程和子线程通讯更新ui示例

    这篇文章主要介绍了android使用handler ui线程和子线程通讯更新ui的方法,大家参考使用吧
    2014-01-01

最新评论