为自定义View在xml里面设置属性
至少在xml文件中写上上面的内容。其中com.example.xhelloworld.NewView这句是需要显示的控件所代表的类。Com.example.xhelloworld是类的包名,NewView是类名。这个类肯定是继承自View的自定义类(其实就是,使我们自己写的,这是废话了。。。),可以是在工程中直接源码添加xxxx.java的,也可以是在libs目录下自己新添加的jar包里面的。如果是jar包里面的一个类,则路径就是jar包里面,这个类的路径。 完成上面的两步之后就可以在代码中实例化这个布局文件了 @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //setContentView(new MyView(this)); 显示的效果同上图。
下面介绍如何实现自定义View的属性设置。实现自定义View的属性设置,需要: ·在values目录下建立attrs.xml文件,添加属性内容 ·在布局文件中添加新的命名空间xmlns,然后可以使用命名空间给自定义的空间设置属性 ·设置完属性之后,当然还要对其进行处理。在自定义View类中的构造方法中进行处理 根据这三步给一个例子进行说明一下 首先添加attrs.xml文件,在定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleablename="MyView"> attr"textColor"format="color"/> "textSize""dimension"/> </declare-styleable> </resources> 然后在布局文件中完成: xmlns:my=http://schemas.android.com/apk/res/com.example.xhelloworld
com.example.xhelloworld.MyView android:layout_width="fill_parent" android:layout_height="wrap_content" my:textColor="#FFFFFFFF" my:textSize="22dp" /> 注:这步我在实现的时候出错,问题是显示找不到属性textColor和textSize,这奇怪的错误。解决方法是,在写my:textColor="#FFFFFFFF"时,写到my之后,按alt+/,这是会自动添加一个xmlns,和my的路径是一样的,用生成的这个替换掉my就可以了。奇葩的问题就用奇葩的方法解决。起初我也不知道怎么弄,瞎搞出来的。 最后在MyView.java中添加另一个构造方法,并添加代码来处理从xml中获得的属性 publicMyView(Context context,AttributeSet attrs){ super(context,attrs); mPaint=newPaint(); //TypedArray是一个用来存放由context.obtainStyledAttributes获得的属性的数组 //在使用完成后,一定要调用recycle方法属性的名称是styleable中的名称+“_”+属性名称//TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.MyView); TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.MyView); inttextColor = array.getColor(R.styleable.MyView_textColor,0XFF00FF00);提供默认值,放置未指定floattextSize = array.getDimension(R.styleable.MyView_textSize,36); mPaint.setColor(textColor); mPaint.setTextSize(textSize); array.recycle();一定要调用,否则这次的设定会对下次的使用造成影响 } 完成之后就已经实现了自定视图的构造,自定义视图属性的添加很处理。现在完成的是一般的自定义视图,继承自TextView或者View等视图,也就是通过程序主UI线程完成更新的视图,如果是自定义SurfaceView,实现方法有所不同。 添加完之后肯定有很多疑问,自己去做可能还不能理解。这里再对上面操作进行解释说明。 背后的事 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |