1. ホーム
  2. android

[解決済み] ProgressBarが表示されている間、ユーザーとのインタラクションを無効にするには?

2023-03-27 21:05:25

質問

カスタム ProgressBar を使用しています。タスクが進行している間、プログレス バーを表示していますが、ユーザーはまだビューやコントロールと対話できます。 ProgressDialog が表示されているときと同じように、ビュー全体のユーザーとの対話を無効にするにはどうしたらよいでしょうか。

メインビューの上に透明なビューを使用し、そのビューにプログレスバーを表示し、タスクが完了するとそのビューを非表示にする必要がありますか。

または、parentViewのidを取得し、それをdisabledに設定するだけでしょうか?しかし、その場合、ビュー/アクティビティ/フラグメントにダイアログが表示されるときのように、背景を暗くすることができません。そうですよね?

私は、プログレスバーが表示されている間、ユーザーの操作を無効にする方法を知りたいだけです。

ありがとうございます。

どのように解決するのですか?

<ブロッククオート

ご質問の件です。AndroidでProgressBarが表示されている間、ユーザーとのインタラクションを無効にするにはどうしたらよいでしょうか。

ユーザーとのインタラクションを無効にするには、以下のコードを追加する必要があります。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

ユーザーとのインタラクションを取り戻すには、次のコードを追加するだけです。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

以下はその例です。 注:ユーザーとのインタラクションを無効にしたり保持したりする方法を示すために、単なる例をあげているのです。

xmlにプログレスバーを追加してください。

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/progressBar"
    android:visibility="gone"/>

MainActivityでは、ボタンが押されるとプログレスバーを表示し、ユーザーとのインタラクションを無効化します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mImageView = (ImageView) findViewById(R.id.imageView);
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
    mImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mProgressBar.setVisibility(View.VISIBLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        }
    });
}

そして、ユーザーがバックプレスをしたときに、ユーザーのインタラクションを保持したまま、再びプログレスバーを削除します。

  @Override
public void onBackPressed() {
    super.onBackPressed();
    mProgressBar.setVisibility(View.GONE);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}

表示を無効にしてグレーアウトさせる機能を追加したい場合は、xmlレイアウトファイルに、親を埋める線形レイアウトを追加する必要があります。その背景を#B0000000に設定し、その visibiltyGONE . そして、プログラムによってその visibilityVISIBLE .

これが役に立つといいのですが