How to disable user interaction while ProgressBar is visible in android?

后端 未结 7 2046
我在风中等你
我在风中等你 2020-12-12 13:08

I am using a custom ProgressBar. Now while a task is going on, I am showing the progress bar, but user can still interact with the views and controls. How do I disable the

7条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-12 13:25

    Your question: How to disable the user interaction while ProgressBar is visible in android?

    To disable the user interaction you just need to add the following code

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

    To get user interaction back you just need to add the following code

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

    Here is an example: Note:I am giving you just an example to show how to disable or retain user interaction

    Add a progress bar in your xml.Something like this

    
    

    In MainActivity when a button pressed you show the progressbar and disable the user interaction.

    @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);
            }
        });
    }
    

    And when user backPressed you remove the progressbar again retain the user interaction.Something like this

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

    If you want to add a feature of disable and greyed out display, you need to add in your xml layout file a linear layout that fills the parent. Set its background to #B0000000 and its visibilty to GONE. Then programmatically set its visibility to VISIBLE.

    Hope this help!

提交回复
热议问题