今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三) 查看第三课,这样跟容易方便你的理解!

xml文件里定义控件的属性,我们已经习惯了android:attrs="",那么我们能不能定义自己的属性能,比如:test:attrs=""呢?答案是肯定的.

好了我就不卖关子了,直接进入主题。大致以下步骤:

一、res/values文件下定义一个attrs.xml文件.代码如下:

view plain
  1. 一、在res/values文件下定义一个attrs.xml文件.代码如下:
  2. <?xmlversion="1.0"encoding="utf-8"?>
  3. <resources>
  4. <declare-styleablename="MyView">
  5. <attrname="textColor"format="color"/>
  6. <attrname="textSize"format="dimension"/>
  7. </declare-styleable>
  8. </resources>

二、我们在MyView.java代码修改如下,其中下面的构造方法是重点,我们获取定义的属性我们R.sytleable.MyView_textColor,获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.MyView_textSize, 36);)防止我们在xml文件中没有定义.从而使用默认值!

获取,MyView就是定义在<declare-styleable name="MyView"></declare-styleable>里的名字,获取里面属性用 名字_ 属性连接起来就可以.TypedArray 通常最后调用 .recycle()方法,为了保持以后使用该属性一致性!

view plain
  1. publicMyView(Contextcontext,AttributeSetattrs)
  2. {
  3. super(context,attrs);
  4. mPaint=newPaint();
  5. TypedArraya=context.obtainStyledAttributes(attrs,
  6. R.styleable.MyView);
  7. inttextColor=a.getColor(R.styleable.MyView_textColor,
  8. 0XFFFFFFFF);
  9. floattextSize=a.getDimension(R.styleable.MyView_textSize,36);
  10. mPaint.setTextSize(textSize);
  11. mPaint.setColor(textColor);
  12. a.recycle();
  13. }

MyView.java全部代码如下:

view plain
  1. packagecom.android.tutor;
  2. importandroid.content.Context;
  3. importandroid.content.res.TypedArray;
  4. importandroid.graphics.Canvas;
  5. importandroid.graphics.Color;
  6. importandroid.graphics.Paint;
  7. importandroid.graphics.Rect;
  8. importandroid.graphics.Paint.Style;
  9. importandroid.util.AttributeSet;
  10. importandroid.view.View;
  11. publicclassMyViewextendsView{
  12. privatePaintmPaint;
  13. privateContextmContext;
  14. privatestaticfinalStringmString="WelcometoMrWei'sblog";
  15. publicMyView(Contextcontext){
  16. super(context);
  17. mPaint=newPaint();
  18. }
  19. publicMyView(Contextcontext,AttributeSetattrs)
  20. {
  21. super(context,attrs);
  22. mPaint=newPaint();
  23. TypedArraya=context.obtainStyledAttributes(attrs,
  24. R.styleable.MyView);
  25. inttextColor=a.getColor(R.styleable.MyView_textColor,
  26. 0XFFFFFFFF);
  27. floattextSize=a.getDimension(R.styleable.MyView_textSize,36);
  28. mPaint.setTextSize(textSize);
  29. mPaint.setColor(textColor);
  30. a.recycle();
  31. }
  32. @Override
  33. protectedvoidonDraw(Canvascanvas){
  34. //TODOAuto-generatedmethodstub
  35. super.onDraw(canvas);
  36. //设置填充
  37. mPaint.setStyle(Style.FILL);
  38. //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标
  39. canvas.drawRect(newRect(10,10,100,100),mPaint);
  40. mPaint.setColor(Color.BLUE);
  41. //绘制文字
  42. canvas.drawText(mString,10,110,mPaint);
  43. }
  44. }

三、将我们自定义的MyView加入布局main.xml文件中,平且使用自定义属性,自定义属性必须加上:

xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"蓝色是自定义属性的前缀,红色是我们包名.

main.xml全部代码如下:

view plain
  1. <?xml
  2. version="1.0"encoding="utf-8"?>
  3. <LinearLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"
  6. android:orientation="vertical"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. >
  10. <TextView
  11. android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"
  13. android:text="@string/hello"
  14. />
  15. <com.android.tutor.MyView
  16. android:layout_width="fill_parent"
  17. android:layout_height="fill_parent"
  18. test:textSize="20px"
  19. test:textColor="#fff"
  20. />
  21. </LinearLayout>

四、运行之效果如下图:

今天就到此结束,大家有什么疑问的,请留言,我会及时答复大家!谢谢!

转自:http://blog.csdn.net/android_tutor/article/details/5508615

更多相关文章

  1. 深刻解析 Android(安卓)的 AIDL
  2. 【Android(安卓)内存优化】使用 Memory Analyzer ( MAT ) 工具分
  3. Android高手进阶教程(二十)---Android中的日历读写操作!!!
  4. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  5. android NDK的第一个实验
  6. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  7. Android(安卓)应用程序快速启动的秘诀
  8. Android(安卓)中下载文件到sdcard和进度条小结
  9. NPM 和webpack 的基础使用

随机推荐

  1. 背景图片显示问题 图片显示错误 android
  2. Cordova 入门AndroidStudio集成
  3. android动画效果处理
  4. ContentProvider-获取系统数据
  5. EditText 的常用属性与解释
  6. 阅读《Android(安卓)从入门到精通》(23)—
  7. Android使用Junit测试
  8. android 开源和一些博客总结
  9. Android版本与Linux内核
  10. 改变进度栏的颜色 progress bar 的背景色