布局与控件(四)-Button的响应与背景

标签: Button控件Button背景
4919人阅读 评论(0) 收藏 举报
分类:
更新时间 修改意见
2016-08-02 陈敏

第4节 Button

按钮是需要与用户进行互动的控件。

Button继承自TextView,凡是TextView有的特定,它都有。

public class Button extends TextView {
    ......
}

4.1 与TextView的不同

Button是使用了特别style的TextView。在Button创建的过程中,它使用了一个系统内部的style,

public Button(Context context, AttributeSet attrs) {
    //创建Button的时候,系统給它使用了特别的style:com.android.internal.R.attr.buttonStyle
    this(context, attrs, com.android.internal.R.attr.buttonStyle);
}

4.2 Button的使用方式

Button被点击后,需要有所响应。其实不仅是Button,所有的View(包括TextView)都可以添加响应。

安卓提供了两种响应的方式。

4.2.1 在xml布局文件中设置响应

  1. Button添加一个属性android:onClick,让它的值等于监听函数的函数名。例如,叫onClick

    <Button
        ......
        <!--设置监听函数onClick()-->
        android:onClick="onClick"/>
  2. 在java源码当中,创建一个onClick()函数,声明成public, 返回void类型,传入参数View

    public void onClick(View v)
    {
    
    }
  3. 使用ViewgetId(),识别需要响应的对象,添加响应代码,

    public void onClick(View v)
    {
        //使用getId(),识别需要响应的对象
        switch(v.getId())
        {
            //添加需要响应的操作代码;
            case R.id.button1:
            break;
        }
        break;
    
    }

4.2.2 在java源码中设置响应

  1. 在java源码当中,创建监听器,

    OnClickListener mListener = new OnClickListener() {
    
        //这个onClick()函数与4.2.1中定义的完全一样
        public void onClick(View v)
        {
            //使用getId(),识别需要响应的对象
            switch(v.getId())
            {
                //添加需要响应的操作代码;
            }
            break;
    
        }
    }
  2. 通过findViewById()得到Button;再通过ViewsetOnClickListener设置监听器mListener

    //获取xml中的Button对象
    Button btn = (Button) findViewById(R.id.my_button);
    //设置监听器
    btn.setOnClickListener( mListener );

虽然这里讲的是Button响应的onClick,但实际上,所有的View都可以响应点击操作。

所有的控件或者布局都是View的子类,所以它们设置监听的方法也都是一样的。

4.3 按钮点击效果

除了使用系统设计的按钮样式,也可以自己定义按钮按下去和没有按下去的效果。

  1. res\drawable\目录上,点击右键,启动创建drawable resource的向导;

  2. 创建selector drawable的xml文件,文件名为button_selector

    这样,就在res\drawable\目录下创建了一个名为button_selector.xml的drawable文件。

  3. 根据Button是否被按下的状态android:state_pressed,分别为它们设置不同的drawable。

    android:state_pressed=true,说明当前按钮被按下,
    android:state_pressed=false,说明当前按钮没有被按下;

    这里我们用ColorDrawable演示设置Drawable。在res\values\colors.xml中定义的颜色的名字;给android:drawable属性设置颜色,

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="false" android:drawable="@color/colorBtnNormal"/>
        <item android:state_pressed="true" android:drawable="@color/colorBtnPressed"/>
    </selector>

    如果使用其它类型的Drawable,使用方式类似。

    例如背景是图片:按下使用normal.png,未按下使用pressed.png。将这些图片放在res\drawable\目录下。对应的selector就应该写成,

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="false" android:drawable="@drawable/normal"/>
        <item android:state_pressed="true" android:drawable="@drawable/pressed"/>
    </selector>
  4. Buttonandroid:background属性,使用drawable selector,

    <Button
    ......
    android:background="@drawable/button_selector"/>

/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。

*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。

*最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:601267次
    • 积分:7063
    • 等级:
    • 排名:第3372名
    • 原创:114篇
    • 转载:0篇
    • 译文:0篇
    • 评论:180条
    我的地盘

    程序猿+工程狮,用理性的思维理解世界,用优雅的代码影响世界,用10的语言探索世界。我们是一群喜欢Coding十余年的工匠,也是一群潜心钻研十余载的码农。




    欢迎加入我们的QQ群:

    348702074

    阅读我的最新系列文章:


    安豆的杂货铺
    博客专栏
    手把手做Arduino智能玩具
    大话Arduino智能硬件
    手把手做安卓开发
    大话安卓应用开发