Android~Button控件~三种常用点击方式
Button控件常用点击方式分为以下3种
方式 | |
指定onClick属性 | 在对应Button那里添加一个事件 eg:android:onClick=“事件名称”(事件名称自己命名) |
匿名内部类 | 设置一个监听器 setOnClickListener(对象) 对点击事件进行监听 |
Activity实现OnClickListener接口 | 重写onClick()方法,通过switch判断哪个语句被点击,所以TA比较适用于按钮多的情况,这样可以降低代码的重复率 |
- 指定onClick属性
android:id="@+id/btn_one"
(btn_on 作为这个Button的ID,每个控件ID最好不一样)
android:onClick=“btn_click1”
(btn_click1 作为点击按钮事会触发的事件名称,事件名称自己命名)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="btn_click1"/>
</LinearLayout>
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button btn_one; //
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);
//控件初始化:(Button)可以理解为强制转换,因为btn_one是Button控件,如果
//btn_one是TextView,就是(TextView)。
//findViewById(R.id.btn_one)这个的大概功能就是说我们去识别所有的ID
//找出你要用到的这个btn_one,因为在这个页面其实是不认识btn_one的。
btn_one=(Button)findViewById(R.id.btn_one);
}
public void btn_click1(View v){
btn_one.setText("onClick属性实现点击");
}
//当我们点击按钮的时候,他会出发事件,这里是对于事件的执行内容
//getText()方法用于检索数据,setText()方法在应用别处显示数据。
}
效果如下:上边是点击前,下边是点击后
- 匿名内部类
匿名内部类是对于按钮2进行实施的,不需要像按钮1一样增加一个事件
android:orientation=“vertical” 这个是按钮垂直排列的意思
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="btn_click1"/>
<Button
android:id="@+id/btn_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2" />
</LinearLayout>
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button btn_one;
private Button btn_two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);
//控件初始化
btn_one=(Button)findViewById(R.id.btn_one);
btn_two=(Button)findViewById(R.id.btn_two);
//通过匿名内部类实现点击事件,注意这个位置,不要写到下面去了
//监听器setOnClickListener(对象)
btn_two.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_two.setText("匿名内部类实现点击");
}
});
}
public void btn_click1(View v){
btn_one.setText("onClick属性实现点击");
}
}
效果如下:
- Activity实现OnClickListener接口
这个的xml代码和匿名内部类的是一样的,在出现两个也就是多个按钮的时候,我们使用这种方式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="btn_click1"/>
<Button
android:id="@+id/btn_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2" />
</LinearLayout>
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
//implements作为类接口,注意这里多了一个implements View.OnClickListener实现监听器的接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn_one;
private Button btn_two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);
//控件初始化
btn_one=(Button)findViewById(R.id.btn_one);
btn_two=(Button)findViewById(R.id.btn_two);
//监听器setOnClickListener(this),this代表所在的类
btn_one.setOnClickListener(this);
btn_two.setOnClickListener(this);
}
//通过switch判断点击的哪一个按钮
public void onClick(View v){
switch (v.getId()){//判断是否获取到id
case R.id.btn_one://获取的id是否是btn_one
btn_one.setText("按钮1被点击");
break;
case R.id.btn_two://获取的id是否是btn_two
btn_two.setText("按钮2被点击");
break;
}
}
}
效果如下: