当我们自定义View的时候,在给View赋值一些长度宽度的时候,一般都是在layout布局文件中进行的。,比如android:layout_height="wrap_content",除此之外,我们也可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了。

values/attrs.xml

首先要创建变量,创建了个values/attrs.xml文件,或文件名任意,但是要在values目录下:

<?xml version="1.0" encoding="utf-8"?>   <resources>       <declare-styleable name="MyView">           <attr name="textSize" format="dimension" />       </declare-styleable>   </resources>

其中resource是跟标签,可以在里面定义若干个declare-styleable,<declare-styleable name="MyView">中name定义了变量的名称,下面可以再自定义多个属性,针对<attr name="textSize" format="dimension"/>来说,其属性的名称为"textSize",format指定了该属性类型为dimension,只能表示字体的大小。

  • format还可以指定其他的类型比如:
  • reference 表示引用,参考某一资源ID
  • string 表示字符串
  • color 表示颜色值
  • dimension 表示尺寸值
  • boolean 表示布尔值
  • integer 表示整型值
  • float 表示浮点值
  • fraction 表示百分数
  • enum 表示枚举值
  • flag 表示位运算

layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:myapp="http://schemas.android.com/apk/res/com.eyu.attrtextdemo"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:orientation="vertical"      tools:context=".MainActivity" >      <us.yydcdut.MyView          android:layout_height="wrap_content"          android:layout_width="wrap_content"          myapp:textSize="20sp"          myapp:myColor="#324243"/>    </LinearLayout>

可以看到多了xmlns:myapp="http://schemas.android.com/apk/res/com.eyu.attrtextdemo"以及在自定义View中 myapp:textSize="20sp" ,myapp:myColor="#324243"

obtainStyledAttributes

context通过调用obtainStyledAttributes方法来获取一个TypeArray,然后由该TypeArray来对属性进行设置

obtainStyledAttributes方法有三个,我们最常用的是有一个参数的obtainStyledAttributes(int[] attrs),其参数直接styleable中获得

TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);

调用结束后务必调用recycle()方法,否则这次的设定会对下次的使用造成影响

public class MyView extends View{      public Paint paint;        public MyView(Context context, AttributeSet attrs) {          super(context, attrs);          paint = new Paint();                    TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);              int textColor = a.getColor(R.styleable.MyView_myColor, 003344);          float textSize = a.getDimension(R.styleable.MyView_myTextSize, 33);          paint.setTextSize(textSize);          paint.setColor(textColor);          a.recycle();      }        public MyView(Context context) {          super(context);      }            @Override     protected void onDraw(Canvas canvas) {          super.onDraw(canvas);             paint.setStyle(Style.FILL);          canvas.drawText("aaaaaaa", 10, 50, paint);      }        }

我是天王盖地虎的分割线

更多相关文章

  1. android:EditText属性
  2. IBM详解 Android(安卓)的 Activity 组件
  3. Android中Java和JavaScript交互
  4. Android开发之动态库调用
  5. Android(安卓)内存溢出问题分析
  6. GridView属性
  7. android:windowSoftInputMode属性使用
  8. Android(安卓)Material Design调色板
  9. android ndk 调用第三方so

随机推荐

  1. android dex工具打包Could not reserve e
  2. android 服务service里面出Toast
  3. Android(安卓)Kill App
  4. android手机端与PC端使用adb forword通信
  5. 浏览器中的JS和获取dom元素
  6. PHP后期静态绑定、单例模式、重载小结及
  7. 代码讲解Android(安卓)Scroller、Velocit
  8. android 从Activity 获取 rootView 根节
  9. Android(安卓)SurfaceView 实现实时显示
  10. android 做登陆与mysql数据库交互