Android基础 —— 按钮控件

374 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

安卓基础 —— 按钮控件

按钮类

Button

继承自TextView, 仅可以显示文字的按钮 Button是TextView的子类, 这意味着它基本包含TextView的相关属性和方法.

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    ... />

ImageButton

继承自ImageView, 仅可以显示图片的按钮

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/button_icon"
    android:contentDescription="@string/button_icon_desc"
    ... />

按钮响应点击事件

以Button类举例

法一——定义onClick属性

Button的onClick属性值是是为了响应点击事件而调用的方法的名称, 在Activity中必须实现该方法 如

<Button
    android:id="@+id/button"
    android:text="@string/app_name"
    android:layout_width="200dp"
    android:layout_height="100dp"
    
    android:onClick="MyClick" 
    />

按钮被点击后会自动调用方法

public void MyClick(View view) {
    //do something
}

Button的onClick绑定的方法必须满足如下条件

  • public
  • 返回值类型为 void
  • 将 View 指定为其唯一的参数(这将是被点击的 View

法二——设置Listener

在Activity中为按钮设置监听器(非标准翻译), 监听器检测到对应的点击事件后会自动执行相关代码

监听器也分为好几种

ClickListener

检测按钮的点击事件(以按钮被松开为标志) 设置ClickListener的代码

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //do something
    }
});

setOnClickListener这个方法需要传入一个OnClickListener接口的实现对象, 一般我们以多态的形式直接实现它. 以下的Listener也类似

LongClickListener

顾名思义, 该监听器检测长按事件, 标志为按下按钮且一小段时间没有松开

button.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        // do something
        return false;
    }
});

返回值的含义是长按是否消费当前动作, 当动作被消费, 动作将不再被检测到. 例如返回值为true时, 长按按钮后松开, 只有LongClick做出反应, 因为LongClick反应后消费了此动作, "松开"也就不能在被Click检测到.

TouchListener

检测触摸事件, 有三个动作会触发触摸事件

  • DOWN, 手指摸到了屏幕, 且要是按钮区域内开始摸到
  • MOVE, 滑动
  • UP, 手指离开屏幕
button.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //do something
        return false;
    }
});

返回值与LongClick类似, Touch的down动作总是先于LongClick和Click被检测到, 所以如这里返回true, LongClick和Click均不能再处理此事件

引用参考

按钮  |  Android 开发者  |  Android Developers (google.cn)