• android自定义View的实现


    自定义View会用到TypedArrayattrs.xmlAttributeSet知识

    先说一下attrs.xml文件。这个文件定义了自定义View的属性的信息,包括属于哪个控件属性的名称,属性的类型。下面是一个普通的attrs.xml的内容

    <resources>

    <declare-styleable name = “MyView”>

        <attr name = “textColor” format = “color”></attr>

    <attr name = “textSize” format = “dimension”/>

    </declare-styleable>

    </resources>

    其中标签declare-styleablename属性代表了接下来定义的属性的所属控件(只是用来区分不同declare-styleable的代号而且,不一定非要和属性相关的控件的名称一致)。标签attr就是用来的定义具体的属性,name代表属性名,format代表属性的类型。

    Attrs.xml文件中属性类型format值的格式

    引用型reference

    定义:

    <attr name = “background” format = “reference” />

    使用:

    Tools:background = “@drawable/图片ID”

    颜色型color

    定义:<attr name = “textColor” format = “color” />

    使用:tools:textColor = “#ffffff”

    布尔型boolean

    定义:<attr name = “focusable” format = “boolean” />

    使用:tools: focusable = “true”

    尺寸型dimension

    定义:<attr name = “layout_width” format = “dimension” />

    使用:tools: layout_width = “42dip”

    浮点型float

    定义:<attr name = “fromAlpha” format = “float” />

    使用:tools: fromAlpha = “1.0”

    整型integer

    定义:<attr name = “frameDuration” format = “integer” />

    使用:tools: frameDuration = “100”

    字符串string

    定义:<attr name = “apiKey” format = “string” />

    使用:tools: apiKey = “dsegergegasefwg”

    百分数fraction

    定义:<attr name = “pivotX” format = “fraction” />

    使用:tools: pivotx = “200%”

    枚举型enum

    < attr name="orientation">

      < enum name="horizontal" value="0" />

      < enum name="vertical" value="1" />

    < /attr>

    使用:android:orientation = "vertical"

    标志位、位或运算,格式如下:

    < attr name="windowSoftInputMode">

      < flag name = "stateUnspecified" value = "0" />

      < flag name = "stateUnchanged" value = "1" />

      < flag name = "stateHidden" value = "2" />

      < flag name = "stateAlwaysHidden" value = "3" />

      < flag name = "stateVisible" value = "4" />

      < flag name = "stateAlwaysVisible" value = "5" />

      < flag name = "adjustUnspecified" value = "0x00" />

      < flag name = "adjustResize" value = "0x10" />

      < flag name = "adjustPan" value = "0x20" />

      < flag name = "adjustNothing" value = "0x30" />

    < /attr>

    XML中使用:

    android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">

    属性定义可以指定多种类型:

    定义:< attr name = "background" format = "reference|color" />

    使用:android:background = "@drawable/图片ID|#00FF00"

    TypedArray

    Context类的obtainStyledAttributes方法一起使用,作为一个不同类型的数据的容器使用。使用是如:

    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView);

    这句一般是使用在自定义View的构造方法中的,其中attrs是构造方法的形参,而R.styleable.MyView是和attrs.xml相关的。MyViewattrs.xmldeclare-styleablename属性的值。如果这个自定义Viewattrs.xml文件中对应的declare-styleablename属性值为A,那么这里就写R.styleable.A

    其中包括很多方法,用来获取这个容器中包含的值

    ·getColor  获取颜色值

    ·getDimension   获取尺寸值

    这些方法一般都有这两个参数int index, int defValue。其中index为用来查找属性的检索值。如果实在attrs.xml文件中定义的属性,就是R.styleable.xxxx_yyyyXxxx代表declare-styleablename值,yyyy代表attrname值。

    defValue代表默认值,即如果在xml文件中没有设置,可以使用默认值来进行设置。

    AttributeSet是一个属性的集合,与一个在XML文件中的标签相联系。如在自定义View中,构造方法中会有一个AttributeSet类型的参数,这个参数就和XML中定义的自定义View相联系的。一般不需要直接使用它。

    转自:http://blog.chinaunix.net/uid-26885609-id-3479675.html

  • 相关阅读:
    换教室
    [国家集训队]礼物
    【模板】扩展卢卡斯(学习笔记)
    Desert King
    绿豆蛙的归宿
    Dropping tests
    [SDOI2013]随机数生成器
    佳佳的fib
    [USACO10OPEN]水滑梯Water Slides
    强大的XML
  • 原文地址:https://www.cnblogs.com/zhangyulogin/p/3039404.html
Copyright © 2020-2023  润新知