我知道这个问题可能不够明确。有没有办法阻止用户在使用Handler
延迟(3秒)时在屏幕上点击或做任何事情。
答案 0 :(得分:1)
防止这种情况的最佳方法是禁用所有可触摸的事件。您可以将此标志与您的支票事件相结合。
要阻止的代码:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
取消阻止(清除标志):
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
答案 1 :(得分:0)
我认为你最好用setCancelable(false)显示对话框(等待对话框......)3秒钟。
答案 2 :(得分:0)
您必须使用带加载的对话框,这将让用户知道某些内容正在进行中。
private void showLoading(String msg) {
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.loading);
TextView msgtv = (TextView) dialog.findViewById(R.id.msg);
msgtv.setVisibility(View.VISIBLE);
msgtv.setText(msg);
if (msg.isEmpty()) {
msgtv.setVisibility(View.GONE);
}
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.alpha_transparent)));
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
dialog.getWindow().setAttributes(lp);
dialog.show();
// this runnable will hide dialog after sometime if networkresponse is slow.
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
LogManager.i(TAG, "run");
if (dialog != null && dialog.isShowing()) {
LogManager.i(TAG, "run dialog");
// if (status_network_connection) {
if (isNetworkConnected()) {
} else {
showNetworkError();
}
hideCustomDialog();
// }
}
}
}, 3000);
}
使用下面的代码来隐藏对话框
// hide loading dialog
public void hideCustomDialog() {
if (dialog != null) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
dialog = null;
}
创建一个xml文件loading.xml
,它将定义加载视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progres"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/progress_bg"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/inner_img_xl">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/inner_img_m"
android:textColor="@color/colorDividerGray"
android:textSize="@dimen/text_size_button_s"
android:visibility="gone" />
</LinearLayout>
答案 3 :(得分:0)
你可以试试这个:
// Prevent user from interacting with current activity
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// After 3 seconds elapsed, just let user to interact with the activity.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}, 3000);
答案 4 :(得分:0)
阻止用户执行任何操作的最佳方法是通过进度对话框。 Android是围绕这个构建的,因为它可以帮助用户了解幕后发生的事情。
你可以使用:
progress.setCanceledOnTouchOutside(false);
progress.setCancelable(false);
以防止在加载时进一步的用户操作。