美文网首页
来写一个简单的自定义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