Indeterminate Horizontal ProgressBar BELOW ActionBar using AppCompat?

后端 未结 1 1642
南笙
南笙 2020-12-29 15:10

I have been looking for answers on how to place the indeterminate horizontal progress bar below the action bar using AppCompat. I\'m able to get the horizontal progress bar

相关标签:
1条回答
  • 2020-12-29 16:12

    I faced a similar problem recently and solved it by creating my own progressbar and then aligning it by manipulating getTop() of the content view.

    So first create your progressbar.

    final LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 20); //Use dp resources
    
    
    mLoadingProgressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
    mLoadingProgressBar.setIndeterminate(true);
    mLoadingProgressBar.setLayoutParams(lp);
    

    Add it to the window (decor view)

    final ViewGroup decor = (ViewGroup) getWindow().getDecorView();
    decor.addView(mLoadingProgressBar);
    

    And in order to get it to its correct position Im using a ViewTreeObserver that listens until the view has been laid out (aka the View.getTop() isnt 0).

    final ViewTreeObserver vto = decor.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    
            final View content = getView(android.R.id.content);
    
            @Override
            public void onGlobalLayout() {
                int top = content.getTop();
    
                //Dont do anything until getTop has a value above 0.
                if (top == 0)
                    return;
    
                //I use ActionBar Overlay in some Activities, 
                //in those cases it's size has to be accounted for
                //Otherwise the progressbar will show up at the top of it
                //rather than under. 
    
                if (getSherlock().hasFeature((int) Window.FEATURE_ACTION_BAR_OVERLAY)) {
                    top += getSupportActionBar().getHeight();
                }
    
                //Remove the listener, we dont need it anymore.
                Utils.removeOnGlobalLayoutListener(decor, this);
    
                //View.setY() if you're using API 11+, 
                //I use NineOldAndroids to support older 
                ViewHelper.setY(mLoadingProgressBar, top);
            }
        });
    

    Hope that makes sense for you. Good luck!

    0 讨论(0)
提交回复
热议问题