实现“android button带loading”的步骤
概述
在Android开发中,我们经常会遇到需要在按钮点击时显示加载中的状态,以提高用户体验。本文将介绍如何实现一个带有加载中状态的按钮。
步骤概览
步骤 | 描述 |
---|---|
1 | 创建一个自定义的Button类 |
2 | 添加一个加载中的布局 |
3 | 实现按钮的点击事件 |
4 | 处理加载中状态的显示和隐藏 |
详细步骤
步骤 1:创建一个自定义的Button类
首先,我们需要创建一个自定义的Button类,继承自Android原生的Button类。在该类中,我们将添加一些属性和方法,用于处理加载中状态的显示和隐藏。
public class LoadingButton extends AppCompatButton {
private ProgressBar progressBar;
public LoadingButton(Context context) {
super(context);
init();
}
public LoadingButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LoadingButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 初始化按钮的默认状态
setEnabled(true);
}
}
步骤 2:添加一个加载中的布局
为了在按钮点击时显示加载中的状态,我们需要在按钮上方添加一个ProgressBar作为加载中的布局。
public class LoadingButton extends AppCompatButton {
private ProgressBar progressBar;
public LoadingButton(Context context) {
super(context);
init();
}
public LoadingButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LoadingButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 添加ProgressBar作为加载中布局
progressBar = new ProgressBar(getContext());
addView(progressBar);
// 设置ProgressBar的位置和大小
LayoutParams params = (LayoutParams) progressBar.getLayoutParams();
params.gravity = Gravity.CENTER;
progressBar.setLayoutParams(params);
// 默认隐藏ProgressBar
progressBar.setVisibility(View.GONE);
}
}
步骤 3:实现按钮的点击事件
为了能够响应按钮的点击事件,我们需要在自定义的Button类中重写performClick()
方法,并在该方法中处理按钮的点击逻辑。
public class LoadingButton extends AppCompatButton {
private ProgressBar progressBar;
public LoadingButton(Context context) {
super(context);
init();
}
public LoadingButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LoadingButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 添加ProgressBar作为加载中布局
progressBar = new ProgressBar(getContext());
addView(progressBar);
// 设置ProgressBar的位置和大小
LayoutParams params = (LayoutParams) progressBar.getLayoutParams();
params.gravity = Gravity.CENTER;
progressBar.setLayoutParams(params);
// 默认隐藏ProgressBar
progressBar.setVisibility(View.GONE);
}
@Override
public boolean performClick() {
showLoading(); // 显示加载中状态
boolean handled = super.performClick(); // 调用父类的点击事件处理
hideLoading(); // 隐藏加载中状态
return handled;
}
}
步骤 4:处理加载中状态的显示和隐藏
最后,我们需要实现showLoading()
和hideLoading()
方法,用于显示和隐藏加载中的状态。
public class LoadingButton extends AppCompatButton {
private ProgressBar progressBar;
public LoadingButton(Context context) {
super(context);
init();
}
public LoadingButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LoadingButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 添加ProgressBar作为加载中布局
progressBar = new ProgressBar(getContext());
addView(progressBar);
// 设置ProgressBar的位置和大小
LayoutParams params = (LayoutParams) progressBar.getLayoutParams();
params.gravity = Gravity.CENTER;
progressBar.setLayoutParams(params);
// 默认隐藏ProgressBar
progressBar.setVisibility(View.GONE);
}
@Override
public boolean performClick() {
showLoading(); // 显示加载中状态
boolean handled = super.performClick(); // 调用父类的点击事件处理
hideLoading(); // 隐藏加载中状态
return handled;
}
private void showLoading