为自定义View在xml里面设置属性

前端之家收集整理的这篇文章主要介绍了为自定义View在xml里面设置属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

至少在xml文件中写上上面的内容。其中com.example.xhelloworld.NewView这句是需要显示的控件所代表的类。Com.example.xhelloworld是类的包名,NewView是类名。这个类肯定是继承自View自定义类(其实就是,使我们自己写的,这是废话了。。。),可以是在工程中直接源码添加xxxx.java的,也可以是在libs目录下自己新添加jar包里面的。如果是jar包里面的一个类,则路径就是jar包里面,这个类的路径。

完成上面的两步之后就可以在代码中实例化这个布局文件

@H_403_50@ @Override

@H_403_50@ publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

@H_403_50@ setContentView(R.layout.main);

//setContentView(new MyView(this));

显示效果同上图。

下面介绍如何实现自定义View属性设置。实现自定义View属性设置,需要:

·在values目录下建立attrs.xml文件添加属性内容

·在布局文件添加新的命名空间xmlns,然后可以使用命名空间给自定义的空间设置属性

·设置完属性之后,当然还要对其进行处理。在自定义View类中的构造方法中进行处理

根据这三步给一个例子进行说明一下

首先添加attrs.xml文件,在定义属性

<?xml version="1.0" encoding="utf-8"?>

@H_403_50@ <resources>

@H_403_50@ <declare-styleablename="MyView">

attr"textColor"format="color"/>

"textSize""dimension"/>

@H_403_50@ </declare-styleable>

</resources>

然后在布局文件中完成:

xmlns:my=http://schemas.android.com/apk/res/com.example.xhelloworld

com.example.xhelloworld.MyView

@H_403_50@ android:layout_width="fill_parent"

android:layout_height="wrap_content"

@H_403_50@ my:textColor="#FFFFFFFF"

my:textSize="22dp"

/>

注:这步我在实现的时候出错,问题是显示找不到属性textColortextSize,这奇怪的错误解决方法是,在写my:textColor="#FFFFFFFF"时,写到my之后,按alt+/,这是会自动添加一个xmlns,和my的路径是一样的,用生成的这个替换掉my就可以了。奇葩的问题就用奇葩的方法解决。起初我也不知道怎么弄,瞎搞出来的。

最后在MyView.java添加另一个构造方法,并添加代码来处理从xml中获得的属性

@H_403_50@ publicMyView(Context context,AttributeSet attrs){

@H_403_50@ super(context,attrs);

@H_403_50@ mPaint=newPaint();

@H_403_50@ //TypedArray是一个用来存放由context.obtainStyledAttributes获得的属性的数组

//在使用完成后,一定要调用recycle方法属性名称styleable中的名称+“_”+属性名称//TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.MyView);

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

@H_403_50@ inttextColor = array.getColor(R.styleable.MyView_textColor,0XFF00FF00);提供默认值,放置未指定floattextSize = array.getDimension(R.styleable.MyView_textSize,36);

@H_403_50@ mPaint.setColor(textColor);

mPaint.setTextSize(textSize);

@H_403_50@ array.recycle();一定要调用,否则这次的设定会对下次的使用造成影响

}

完成之后就已经实现了自定视图的构造,自定义视图属性添加很处理。现在完成的是一般的自定义视图,继承自TextView或者View等视图,也就是通过程序主UI线程完成更新的视图,如果是自定义SurfaceView实现方法有所不同。

添加完之后肯定有很多疑问,自己去做可能还不能理解。这里再对上面操作进行解释说明。

背后的事

猜你在找的XML相关文章