使用 Android Studio自定义View01——注意是否重写onMeasure的区别,实现真正的自适应布局

本文总结了在Android Studio中自定义View时如何处理尺寸问题,通过是否重写onMeasure方法来实现不同情况的自适应布局,包括限定高度和宽度、自适应宽高以及防止铺满屏幕。同时介绍了MeasureSpec的三种模式,并添加了点击事件以生成随机验证码。
摘要由CSDN通过智能技术生成

整理并总结自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/24252901

一、不重写onMeasure,在res/layout/activity_main.xml中限定view的高度和宽度

com.cctvjiatao.customview01.act.MainActivity.java

/**
 * 自定义View 第一课
 *  1、自定义View的属性
 *  2、在View的构造方法中获得第1步中的自定义属性
 *  3、重写onMeasure(这一步可省略)
 *  4、重写onDraw
 */
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

res/values/ attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="title" format="string"/>
    <attr name="titleColor" format="color"/>
    <attr name="titleSize" format="dimension"/>

    <declare-styleable name="AuthCode">
        <attr name="title"/>
        <attr name="titleColor"/>
        <attr name="titleSize"/>
    </declare-styleable>

</resources>

res/layout/ activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:authcode="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".act.MainActivity">

    <com.cctvjiatao.customview01.view.AuthCode
        android:layout_width="200dp"
        android:layout_height="100dp"
        authcode:title="9527"
        authcode:titleColor="#ff0000"
        authcode:titleSize="40sp" />
</RelativeLayout>


注意:在Android Studio中,使用的是xmlns:authcode="http://schemas.android.com/apk/res-auto",而在Eclipse中则应该使用xmlns:authcode="http://schemas.android.com/apk/res/com.cctvjiatao.customview01",即在res后的路径指向项目的package。


com.cctvjiatao.customview01.view.AuthCode.java

class AuthCode extends View {

    private String mTitle;
    private int mTitleColor;
    private int mTitleSize;

    private Rect mBound;
    private Paint mPaint;

    public AuthCode(Context context) {
        this(context, null);
    }

    public AuthCode(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AuthCode(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        /*
        获得自定义属性
         */
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Aut
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值