一文完全了解Android自定义控件(四)

Android自定控件的步骤

为何自定义控件要步骤化呢?由于不少新手同窗,根据产品的要求作一些控件时,无从下手。android

有了步骤之后,就能够按套路走了,不再用惧怕了。markdown

判断控件类型

首先咱们要判断这个控件是属于自定义控件里的哪一种类型,若是不知道分类的话,同窗们能够看这篇文章自定义控件分类app

获取相关的属性

其实这玩意在自定义控件里叫自定义属性。什么是属性呢?布局

来咱们看,android控件原有的属性:spa

好比说咱们的LinearLayoutcode

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="41px" android:orientation="horizontal">
</LinearLayout>
复制代码

这里面的属性就有origintation,layout_width,layout_height.... 而origintation是LinearLayout特有的,而其余的则是View都有的orm

那么咱们在写本身的控件时,有些值,也是经过xml里的属性进行配置的,因此咱们要有自定义属性。xml

自定义控件里如何自定义属性呢?utf-8

自定义属性步骤:资源

  1. 声明属性

resvalues目录下的attrs.xml文件中(没有就本身新建一个),使用declare-styleable标签自定义属性。

在attrs.xml里进行声明,其实都行,都是resourse,举例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--属性集合-->
    <declare-styleable name="SearchView" >
        <!--hint-->
        <attr name="hint" format="string"/>
        <!--搜索图标 能够经过typedArray.getResourceId获取资源id-->
        <attr name="search_ico" format="reference" />
        <!--清空图标-->
        <attr name="clear_ico" format="reference" />
        <!--语音图标-->
        <attr name="voice_ico" format="reference" />
        <!--输入类型-->
        <attr name="input_type">
            <!--value值只能是int类型的 因此获取时经过typeArray.getInt获取-->
            <enum name="text" value="0"/>
            <enum name="passwordText" value="1"/>
        </attr>

        <attr name="gravity">
            <!--区别于enum enum只能选择一个 flag能够多选 如:left|top-->
            <flag name="left" value="0" />
            <flag name="top" value="1" />
            <flag name="center" value="2" />
            <flag name="right" value="3" />
            <flag name="bottom" value="4" />
        </attr>
    </declare-styleable>

</resources>
复制代码

其中declare-styleable标签表明一个属性集合,name属性要与自定义的控件同名attr则是每条属性了,name是属性值,format是指定属性类型,目前可支持11种类型:

  • reference:引用资源

  • string:字符串

  • Color:颜色

  • boolean:布尔值

  • dimension:尺寸值

  • float:浮点型

  • integer:整型

  • fraction:百分数

  • enum:枚举类型

  • flag:位或运算

  1. 布局文件中使用

首先须要加上一个命名空间xmlns:app="http://schemas.android.com/apk/res-auto" 而后直接利用这个命名空间设置属性便可

<com.searchview.SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" app:hint="aaa" app:search_ico="@drawable/ic_search" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
复制代码

测量

测量是重点要掌握的,若是是ViewGroup则测量本身(设置本身大小,由于ViewGroup也能够是子view呀)跟设置指望孩子的大小。

若是是View则须要测量本身(设置本身大小)

这两个参数要理解

自定义控件的本质

相关文章
相关标签/搜索