美文网首页
来写一个简单的自定义View,熟悉一下自定义view的流程

来写一个简单的自定义View,熟悉一下自定义view的流程

作者: 卖梦为生_若愚 | 来源:发表于2017-06-23 10:29 被阅读0次

    上面每一个item,看上去好像都是一个horizontal的LinearLayout装载了两个ImageView,一个textView,但是这样写未免太麻烦了,这个布局可以只用一个textview实现,但是如果自定义一个这样的view该怎么写呢。

    首先建一个class,继承LinearLayout并给出构造方法:

    ```

    class SettingItemLayout extends LinearLayout{

    public SettingItemLayout(Context context,@NullableAttributeSet attrs) {

    super(context,attrs);

    initLayout(context,attrs);//这个方法用来初始化布局

    }

    }

    ```

    这时候就要考虑自定义的这个view里面都有些啥东西:

    ```

    ImageView imgLeft;//左边的图标

    TextView tv;//文字

    privateImageViewimg_tip;//右边的跳转图标

    ```

    有了上面三个变量,这个布局就成型了,但是左边这个图标需要我们动态设置,所以还要声明一个变量用来从外部设置图片资源

    ```

    Drawable drawable;//设置的图片标资源

    private intmHeight,mWidth;//图标的宽、高

    ```

    而以上三个变量的值,就需要用到一个东西:attrs(这个位于values下面,名称不一定是attrs你可以随便取,但是大家都取attrs),来看看这个里面有什么:

    里面有四个值,分别对应标题的名字,图标的资源文件,图标宽高。关于format:

    ```

    1. reference:参考某一资源ID。如:@drawable/ic_laucher

    2. color:颜色值。

    3. boolean:布尔值。

    4. dimension:尺寸值。

    5. float:浮点值。用法:android:fromAlpha ="1.0  "android:toAlpha ="0.7"

    6. integer:整型值。用法:android:frameDuration ="100"

    7. string:字符串。

    8. fraction:百分数。用法:android:pivotX ="200%"

    9. enum:枚举值。

    ```

    定义一个属性可以指定多个类型,比如背景,可以指定资源也可以指定具体的颜色值:

    ```

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

    定义一个初始化的方法:initLayout(context,attrs);

    private void initLayout(Context context,@NullableAttributeSet attrs) {

    View.inflate(context,R.layout.base_menu_item_layout, this);//将布局文件加载进来,第三个参数this指装载这个布局的父容器

    imgLeft= (ImageView) findViewById(R.id.img_myzne);

    img_tip= (ImageView) findViewById(R.id.img_tip);

    tv= (TextView) findViewById(R.id.tv);

    TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.base_menu_item);

    String title = typedArray.getString(R.styleable.base_menu_item_menu_item_name);

    drawable= typedArray.getDrawable(R.styleable.base_menu_item_drawableleft_src);

    mWidth=typedArray.getDimensionPixelSize(R.styleable.base_menu_item_drawableleft_width,0);

    mHeight=typedArray.getDimensionPixelSize(R.styleable.base_menu_item_drawableleft_height,

    0);

    //这个必须调用

    typedArray.recycle();

    //然后将获取到的标题和图标资源设置到控件上

    tv.setText(title);

    imgLeft.setImageDrawable(drawable);

    }

    ```

    相关文章

      网友评论

          本文标题:来写一个简单的自定义View,熟悉一下自定义view的流程

          本文链接:https://www.haomeiwen.com/subject/epoqcxtx.html