<item name="android:button",【Android】Button原理详解

在Android中Button是一个非常常用的控件,下面我们就一起来剖析一下Button的原理。

1 Button.java

原本以为Button是一个非常复杂的控件,所以它的源码也应该非常复杂,但是看到Button.java的代码之后我震惊了,代码如此的简单:

public class Button extends TextView {

publicButton(Context context) {

this(context, null);

}

publicButton(Context context, AttributeSet attrs)

{

this(context, attrs,

com.android.internal.R.attr.buttonStyle);

}

publicButton(Context context, AttributeSet attrs,

int defStyle) {

super(context, attrs, defStyle);

}

}

这就是Button.java中除去打包和引用及注释代码之后的全部代码。可以看到Button是继承自TextView的,然后为其添加了一个默认的com.android.internal.R.attr.buttonStyle样式。下面我们就来看看这个默认的样式。

2 styles.xml

在android源码的styles.xml文件中我们找到了所有关于Button的样式:

name="android:background">@android:drawable/btn_default

name="android:focusable">true

name="android:clickable">true

name="android:textAppearance">?android:attr/textAppearanceSmallInverse

name="android:textColor">@android:color/primary_text_light

name="android:gravity">center_vertical|center_horizontal

name="android:background">@android:drawable/btn_default_small

name="android:background">@android:drawable/button_inset

name="android:background">@android:drawable/btn_default_transparent

name="android:textAppearance">?android:attr/textAppearanceSmall

name="android:textColor">@android:color/white

这里我们能看到button真正的各种获取焦点、被按下的各种样式都是由btn_default、btn_default_small、button_inset、btn_default_transparent这几个xml文件来控制的,那我们就接着来看其中的btn_default.xml文件看看其中有什么玄机

3 btn_default.xml

xmlns:android="http://schemas.android.com/apk/res/android">

android:state_enabled="true"

android:drawable="@drawable/btn_default_normal"

/>

android:state_enabled="false"

android:drawable="@drawable/btn_default_normal_disable"

/>

android:drawable="@drawable/btn_default_pressed"

/>

android:state_enabled="true"

android:drawable="@drawable/btn_default_selected"

/>

android:drawable="@drawable/btn_default_normal"

/>

android:drawable="@drawable/btn_default_normal_disable_focused"

/>

android:drawable="@drawable/btn_default_normal_disable"

/>

上面就是里面的所有的内容,它定义了Button各种状态下用到的图片。所以如果我们想自定义一个Button的样式的话我们只需要仿着这个文件来写Button的样式就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值