随堂代码分享【源码下载】
随堂代码演示效果:
这里并没有完成什么好的效果但功能上通过自定义组件解决了ScrollView嵌套ListView GridView的冲突,这一点还是很有学习价值的。
然而自定义控件的功能作用远不止这些,通过博客搜索,看到不少值得深入研究的地方。这里这次就不通过代码的复制粘贴来演示讲解了,跟着视频看,在对着源代码看应该能理解这一届所讲的知识点。这里就引用别人的例子讲解。深入得会写在其他的博文里。
当开发者打算派生自己的UI组件时,需要通过继承View基类的子类,重写View类的相关方法。
自定义Layout
1.首先继承View,实现构造函等:
package cn.com.androidtest.ui; //······ public class MyView extends View { private Paint mPaint; private Context mContext; private static String mString; private String test; public MyView(Context context) { super(context); mPaint = new Paint(); } public MyView(Context context,AttributeSet attrs) { super(context,attrs); mPaint = new Paint(); /*这里取得declare-styleable集合*/ TypedArray typeArray = context.obtainStyledAttributes(attrs,R.styleable.MyView); /*这里从集合里取出相对应的属性值,第二参数是如果使用者没用配置该属性时所用的默认值*/ int textColor = typeArray.getColor(R.styleable.MyView_textColor,0XFFFFFFFF); float textSize = typeArray.getDimension(R.styleable.MyView_textSize, 36); mString = typeArray.getString(R.styleable.MyView_text); /*设置自己的类成员变量*/ mPaint.setTextSize(textSize); mPaint.setColor(textColor); /*关闭资源*/ typeArray.recycle(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setStyle(Style.FILL); canvas.drawRect(new Rect(10, 10, 90, 90), mPaint); mPaint.setColor(Color.BLUE); canvas.drawText(mString, 10, 110, mPaint); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myandroid="http://schemas.android.com/apk/res/cn.com.androidtest" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <cn.com.androidtest.ui.MyView android:layout_width="fill_parent" android:layout_height="wrap_content" myandroid:textColor="#ff0000" myandroid:textSize="20px" myandroid:text="Hello World!"/> </LinearLayout>在XML使用该组件的时候一定要为该自定义组件设置一个命名空间xmlns:myandroid="http://schemas.android.com/apk/res/cn.com.androidtest,不然组件属性设置不了
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="test1" format="string" /> <declare-styleable name="MyView"> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="text" format="string" /> </declare-styleable> </resources>attr子元素:
基础自定义组件就说到这里,通过博客还有很多要加强的,看到一个关于自定义控件都写了一系列。这个后期我会搬过来的