1 Button和TextView的区别
- Button拥有默认的按钮背景,而TextView默认无背景;
- Button的内部本文默认居中对齐,TextView默认靠左对齐;
与TextView相比,Button增加了两个属性
- textAllCaps:指定是否将英文字母转为大写
- onClick:接管用户的点击操作,指定了点击按钮时要触发哪个方法
2 Button点击事件
2.1 xml文件设置click方法(不建议使用)
代码演示
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="直接指定点击方法"
android:textColor="@color/black"
android:textSize="17sp"
android:onClick="doClick"/>
package com.example.day03;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import util.DateUtil;
public class ButtonStyle extends AppCompatActivity {
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_style);
tv_result = findViewById(R.id.tv_result);
}
public void doClick(View view){
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result.setText(desc);
}
}
结果演示
3 监听器
两种常用的监听器
- 点击监听器:通过setOnClickListener方法设置。按钮被按住少于500毫秒时触发点击事件。
- 长按监听器:通过setOnLongClickListener方法设置。按钮被按住超过600毫秒时,会触发长按事件。
3.1 点击监听器
代码显示
public class ButtonClickActivity extends AppCompatActivity {
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
Button btn_click_single = findViewById(R.id.btn_click_single);
tv_result = findViewById(R.id.tv_result);
btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));
}
static class MyOnClickListener implements View.OnClickListener{
private final TextView tv_result;
public MyOnClickListener(TextView tv_result) {
this.tv_result = tv_result;
}
@Override
public void onClick(View view) {
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result.setText(desc);
}
}
}
全局onClick方法
package com.example.day03;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import util.DateUtil;
public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener{
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
Button btn_click_single = findViewById(R.id.btn_click_single);
Button btn_click_public = findViewById(R.id.btn_click_public);
tv_result = findViewById(R.id.tv_result);
btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));
btn_click_public.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId()==R.id.btn_click_public){
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result.setText(desc);
}
}
static class MyOnClickListener implements View.OnClickListener{
private final TextView tv_result;
public MyOnClickListener(TextView tv_result) {
this.tv_result = tv_result;
}
@Override
public void onClick(View view) {
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result.setText(desc);
}
}
}
结果显示
3.2长按监听器
代码显示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btn_long_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="指定长按的点击监听器"
android:textColor="@color/black"
android:textSize="15sp"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:gravity="center"
android:textColor="#000000"
android:textSize="15sp"
android:text="查看点击结果"/>
</LinearLayout>
package com.example.day03;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import util.DateUtil;
public class ButtonLongClickActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_long_click);
Button btn_long_click= findViewById(R.id.btn_long_click);
TextView tv_result = findViewById(R.id.tv_result);
btn_long_click.setOnLongClickListener((View.OnLongClickListener) v -> {
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)v).getText());
tv_result.setText(desc);
return true;
});
}
}
结果显示
4 按钮的启用和禁用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_enable"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="启用测试按钮"
android:textColor="@color/black"
android:textSize="15sp"/>
<Button
android:id="@+id/btn_disable"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="禁用测试按钮"
android:textColor="@color/black"
android:textSize="15sp"/>
</LinearLayout>
<Button
android:id="@+id/btn_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试按钮"
android:textColor="@color/black"
android:textSize="15sp"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:gravity="center"
android:textColor="#000000"
android:textSize="15sp"
android:text="查看点击结果"/>
</LinearLayout>
package com.example.day03;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import util.DateUtil;
public class ButtonEnableActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_test;
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_enable);
Button btn_enable = findViewById(R.id.btn_enable);
Button btn_disable = findViewById(R.id.btn_disable);
tv_result = findViewById(R.id.tv_result);
btn_test = findViewById(R.id.btn_test);
btn_enable.setOnClickListener(this);
btn_disable.setOnClickListener(this);
btn_test.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btn_enable) {
btn_test.setEnabled(true);
btn_test.setTextColor(Color.RED);
} else if (id == R.id.btn_disable) {
btn_test.setEnabled(false);
btn_test.setTextColor(Color.GRAY);
} else if (id == R.id.btn_test) {
if (btn_test.isEnabled()) {
btn_test.setText("按钮已启用");
String desc=String.format("%s 您点击了按钮 %s", DateUtil.getNowTime(),((Button)v).getText());
tv_result.setText(desc);
} else {
btn_test.setText("按钮已禁用");
}
}
}
}
结果显示