码迷,mamicode.com
首页 > 移动开发 > 详细

android 自定义控件

时间:2016-04-06 09:31:20      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:

自定义一般分三种情况

1. 自定义布局

2. 自定义控件

3.直接继承View

 

下面来着eoe例子,实现自定义控件

1. 自定义属性

  res/values/attrs.xml 自定义属性

 

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

2. 自定义控件,实现带有 AttributeSet的构造方法 

package com.test.uidemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

import com.test.uidemo.R;

/**
 * 参考eoe书籍
 * 自定义控件
 * 实现用一个边框把文字包裹.
 */
public class MyTextView extends TextView {

    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.progress);
        setText(attr.getString(R.styleable.progress_text));

        setTextSize(attr.getDimension(R.styleable.progress_textSize, 16));
        Log.i("Text", attr.getString(R.styleable.progress_text));
    }

    protected void onDraw(Canvas canvas){

        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(android.graphics.Color.RED);
        canvas.drawLine(0,0,this.getWidth()-1,0,paint);
        canvas.drawLine(0,0,0,this.getHeight()-1,paint);
        canvas.drawLine(this.getWidth()-1,0,this.getWidth()-1,this.getHeight()-1,paint);
        canvas.drawLine(0,this.getHeight()-1,this.getWidth()-1,this.getHeight()-1,paint);
    }

}

3. 使用自定义控件

  

技术分享
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:progress="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.uidemo.MainActivity">

    <com.test.uidemo.MyTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        progress:text="自定义"
        progress:textSize="30dp"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">
    </com.test.uidemo.MyTextView>

</RelativeLayout>
View Code

 

android 自定义控件

标签:

原文地址:http://www.cnblogs.com/newlangwen/p/5357763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!