如何使用处理程序阻止用户在延迟期间执行任何操作?

时间:2018-04-17 10:01:52

标签: android android-handler

我知道这个问题可能不够明确。有没有办法阻止用户在使用Handler延迟(3秒)时在屏幕上点击或做任何事情。

5 个答案:

答案 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);

以防止在加载时进一步的用户操作。