Home > Back-end >  How to change the size (width and height) of progressbar to fit all in linearlayout?
How to change the size (width and height) of progressbar to fit all in linearlayout?

Time:08-17

I would like to add an unknown amount of progressbar to a linearlayout. (Like Whatsapp Status, and Instagram Stories) I can add progressbar to the linearlayout but the progressbar just shows max 7 progressbar.progressbar with 7 progressbar even though should be 10

My code so far:

while (i < 10){
    i   ;
    View child = getLayoutInflater().inflate(R.layout.stories_progress, null);
    linearLayout.addView(child);
}

I would like to shrink the size of the progressbar programmatically, so when I have 2 progressbar, they fill the layout with 50%/50%, when 5, 10 or even 20 progressbar, they become smaller, all of them will be displayed on linearlayout I tried to get the current width of the linearlayout and divide by the number of progressbars, but the width of the linearlayout returns always 0;

My xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/linear_layout_id"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:orientation="horizontal"
    tools:context=".stories">

</LinearLayout>

My progressbar

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp">

    <ProgressBar
        android:id="@ id/stories_progressBar_id"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ProgressBar>

</LinearLayout>

CodePudding user response:

It is likely that you are not waiting for the top LinearLayout to have a size. You can wait for a size to be assigned by using a ViewTreeObserver.OnGlobalLayoutListener. Here is some code that should help:

linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        linearLayout.removeAllViews();
        int newWidth = linearLayout.getWidth() / 10;
        int newHeight = linearLayout.getHeight();
        int i = 0;
        while (i < 10) {
            i  ;
            LinearLayout child =
                    (LinearLayout) getLayoutInflater().inflate(R.layout.stories_progress,
                            linearLayout, false);
            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) child.getLayoutParams();
            lp.width = newWidth;
            lp.height = newHeight;
            linearLayout.addView(child);
        }
    }
})
  • Related