带倒计时的loadingdialog
时间: 2023-11-21 12:13:13 浏览: 31
好的,以下是一个简单的带倒计时的 loading dialog 的示例代码,你可以参考一下:
```java
public class LoadingDialog extends Dialog {
private TextView tvMessage;
private ProgressBar progressBar;
private CountDownTimer countDownTimer;
private OnTimeOutListener onTimeOutListener;
private static final long DEFAULT_TIMEOUT = 5000; // 默认超时时间为5秒
public LoadingDialog(Context context) {
super(context);
init();
}
public LoadingDialog(Context context, int themeResId) {
super(context, themeResId);
init();
}
protected LoadingDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
init();
}
private void init() {
setContentView(R.layout.dialog_loading);
tvMessage = findViewById(R.id.tv_message);
progressBar = findViewById(R.id.progress_bar);
setCancelable(false);
}
/**
* 设置消息文本
*
* @param message 消息文本
*/
public void setMessage(String message) {
tvMessage.setText(message);
}
/**
* 设置超时时间
*
* @param timeout 超时时间,单位毫秒
*/
public void setTimeout(long timeout) {
if (countDownTimer != null) {
countDownTimer.cancel();
}
countDownTimer = new CountDownTimer(timeout, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 显示剩余时间
tvMessage.setText("距离超时还有 " + millisUntilFinished / 1000 + " 秒");
}
@Override
public void onFinish() {
// 超时回调
if (onTimeOutListener != null) {
onTimeOutListener.onTimeOut();
}
dismiss();
}
};
countDownTimer.start();
}
/**
* 设置超时监听器
*
* @param listener 超时监听器
*/
public void setOnTimeOutListener(OnTimeOutListener listener) {
onTimeOutListener = listener;
}
public interface OnTimeOutListener {
void onTimeOut();
}
}
```
layout/dialog_loading.xml 文件内容如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:indeterminate="true" />
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/progress_bar"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:textColor="@android:color/black"
android:textSize="14sp" />
</RelativeLayout>
```
使用时,可以像这样:
```java
LoadingDialog dialog = new LoadingDialog(this);
dialog.setMessage("正在加载,请稍后...");
dialog.show();
dialog.setTimeout(10000); // 设置超时时间为10秒
dialog.setOnTimeOutListener(new LoadingDialog.OnTimeOutListener() {
@Override
public void onTimeOut() {
// 处理超时事件
Toast.makeText(MainActivity.this, "加载超时", Toast.LENGTH_SHORT).show();
}
});
```
当超时时间到达时,会自动触发 onTimeOut() 方法,可以在该方法中处理超时事件。