Android自定义控件的属性
2012-08-31 13:26
323 查看
当要编写自己的widget或者其他view组件时,能够定义自己的属性标签是很重要的,这让我们能够彻底定制view的外观。
知识点:
1.自定义属性标签及其格式属性。
2.如何创建自己的View。
3.如何使用自己的View。
一、自定义属性标签及其格式属性
在res/values下创建文件attrs.xml。先看一段其中的代码:
reference:参考某一资源ID。
color:颜色值。
boolean:布尔值。
dimension:尺寸值。
float:浮点值。
integer:整型值。
string:字符串。
fraction:百分数。
enum:枚举值。
flag:位或运算。
二、如何创建自己的View
继承View或者它的子类,然后重写构造函数和onDraw函数。看看代码:
三、如何使用自定义View
有了自定义属性数组,又有了自定义View,下面说说怎么使用自定义View吧。看main.xml代码:
然后去要用的地方用吧,看看MainActivity.java代码:
最后上效果图:
知识点:
1.自定义属性标签及其格式属性。
2.如何创建自己的View。
3.如何使用自己的View。
一、自定义属性标签及其格式属性
在res/values下创建文件attrs.xml。先看一段其中的代码:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="background" format="reference" /> </declare-styleable> </resources>这里定义了一个样式属性资源。名字就是MyView,然后有三个属性,文字的颜色,文字的大小,View的背景图片。可以看到attr除了name属性以外,还有一个format属性,它规定了这个属性的数据类型。这个format属性有很多,除了上面的color,dimension,reference以外,还有
reference:参考某一资源ID。
color:颜色值。
boolean:布尔值。
dimension:尺寸值。
float:浮点值。
integer:整型值。
string:字符串。
fraction:百分数。
enum:枚举值。
flag:位或运算。
二、如何创建自己的View
继承View或者它的子类,然后重写构造函数和onDraw函数。看看代码:
package com.wenix; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class MyView extends View { private static final String TAG = "MyView"; private Paint mPaint; Drawable background; public MyView(Context context) { // TODO Auto-generated constructor stub super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub mPaint = new Paint(); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView);//得到属性数组 int textColor = a.getColor(R.styleable.MyView_textColor, Color.BLUE);//得到属性值,可以指定默认值,防止空值,注意引用名。 float textSize = a.getDimension(R.styleable.MyView_textSize, 22);//注意get方法,跟format是一致的。 background = a.getDrawable(R.styleable.MyView_background); mPaint.setColor(textColor); mPaint.setTextSize(textSize); a.recycle();//一定要recycle以下来保证属性值一致。 } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); mPaint.setStyle(Style.FILL); Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.myview_background); canvas.drawBitmap(bitmap, 0, 0, mPaint); // Matrix matrix = new Matrix(); // matrix.postScale(0, 0, 480, 800); // canvas.drawBitmap(bitmap, matrix, mPaint); mPaint.setColor(Color.RED); canvas.drawText("hello,world!", 20, 55, mPaint); } }
三、如何使用自定义View
有了自定义属性数组,又有了自定义View,下面说说怎么使用自定义View吧。看main.xml代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:wenix="http://schemas.android.com/apk/res/com.wenix" //最重要的就是这个命名空间,xmlns后写上你自己的标签,下面就可以引用属性 android:orientation="vertical" //了,res/后面跟上控件所在包的包名。 android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background" > <com.wenix.MyView android:id="@+id/myview" android:layout_width="fill_parent" android:layout_height="wrap_content" wenix:textColor="#ffffffff" //使用上面定义的标签来引用属性。 wenix:textSize="22dp"/> </LinearLayout>
然后去要用的地方用吧,看看MainActivity.java代码:
package com.wenix; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; MyView myView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myView = (MyView)findViewById(R.id.myview); myView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "onClick", Toast.LENGTH_LONG).show(); } }); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); Log.i(TAG,"screen width="+dm.widthPixels+",screen height="+dm.heightPixels);//顺便写了段检测屏幕大小的代码。 } }
最后上效果图:
相关文章推荐
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)
- Android自定义控件的属性
- Android自定义控件以及控件属性的自定义
- android 自定义控件属性
- Android_declare-styleable_自定义控件的属性
- android 自定义控件 自定义属性详细介绍
- android自定义控件并添加属性的方法以及示例
- Android自定义控件提供颜色属性动态改变控件颜色
- Android自定义控件之自定义属性的添加 -(2)
- android 自定义控件 自定义属性详细介绍
- Android自定义控件---组合控件(包括自定义属性)
- android 自定义控件属性
- Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用
- Android--自定义控件的xml属性
- Android 自定义控件的属性
- Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- android中如何使用自定义view,自定义控件属性,及动态自定义控件
- android 自定义控件 属性介绍
- Android中如何使用自定义view 自定义控件属性及动态自定义控件
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)