使用最顶层的视图禁用整个屏幕

时间:2013-03-15 09:59:56

标签: android user-interface

在iOS上,我可以采用简单的视图,只需填充屏幕即可禁用用户的任何互动。

在某些操作(保存,请求等)期间,它与进度条/微调器结合使用。

在Android中执行此操作的最佳方式是什么?我尝试过使用View / * Layout并填充屏幕。它看起来一样,但不会阻止用户触摸事件。

目前我正在使用上述方法,并且有两个函数{disableUI,resetUI}。但这很麻烦。

我没想到的任何更好的方法?欢呼声。

2 个答案:

答案 0 :(得分:2)

您应该使用FragmentDialog或Dialog(如果您使用的是obselete API)。

这是一个例子

public class ProgressDialogFragment extends DialogFragment {

    // ----------------------------------
    // CONSTANTS
    // ----------------------------------
    private static final String BUNDLE_KEY_TITLE = "BUNDLE_KEY_TITLE";
    private static final String BUNDLE_KEY_MESSAGE = "BUNDLE_KEY_MESSAGE";

    // ----------------------------------
    // ATTRIBUTES
    // ----------------------------------
    private String title;
    private String message;

    // ----------------------------------
    // PUBLIC METHODS
    // ----------------------------------
    public static ProgressDialogFragment newInstance(String title) {
        return createProgressDialogFragment(title, null);
    }

    public static ProgressDialogFragment newInstance(String title, String message)  {
        ProgressDialogFragment fragment = new ProgressDialogFragment();
        Bundle bundle = new Bundle();
        bundle.putString(BUNDLE_KEY_TITLE, title);
        bundle.putString(BUNDLE_KEY_MESSAGE, message);
        fragment.setArguments(bundle);
        return fragment;
    }

    // ----------------------------------
    // LIFE CYCLE
    // ----------------------------------

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {
        final ProgressDialog dialog = new ProgressDialog(getActivity());
        // get params from the bundle
        if (getArguments() != null) {
            this.title = getArguments().getString(BUNDLE_KEY_TITLE);
            this.message = getArguments().getString(BUNDLE_KEY_MESSAGE);
        }
        dialog.setTitle(this.title);
        dialog.setMessage(this.message);
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        return dialog;
    }
}

答案 1 :(得分:0)

您可以使用普通ProgressDialog并将cancelable设置为false。见下文

ProgressDialog progDailog = ProgressDialog.show(_context,
            progressString, "Please wait...",
            true);
progDailog.setCancelable(false);

你必须在一个单独的线程中运行它。最好是AsyncTask