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

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

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

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

[java] view plain copy
  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()方法,为了保持以后使用该属性一致性!

[java] view plain copy
  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全部代码如下:

[java] view plain copy
  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全部代码如下:

[java] view plain copy
  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>

四、运行之效果如下图:


经本人测试,结果如上。

更多相关文章

  1. android studio中的build.gradle文件
  2. 应用程序的目录结构解析
  3. 深入理解java中的package关键字
  4. 彻底了解Android中的内部存储与外部存储
  5. 读取android根目录下的文件或文件夹实例
  6. Android自定义控件基本原理详解(一)
  7. 手机Root后如何拿取data/data目录下的文件夹到电脑上
  8. android音乐播放器——通过webview下载歌曲
  9. 关于Android(安卓)Dedub Bridge(adb)的使用

随机推荐

  1. android httpclient 上传文件
  2. Android(安卓)P Launcher APP替换图标不
  3. Android蓝牙耳机接听挂断电话流程
  4. android:windowSoftInputMode属性使用
  5. Android的NDK开发(1)————Android(安
  6. Android输入法扩展之外接键盘中文输入
  7. android中getSystemService详解
  8. android之Adapter
  9. Android靠哪些东西能打败iphone
  10. Android(安卓)SDK安装时碰到的问题之解决