F.O.O
F.O.O

Reputation: 4960

Reusable View Groups

Most of the pages in my application have a progress bar implementation. I would like to create a custom view group which always includes a progress bar.

For example,

<LinearLayout ...>
<ProgressBar .../>
</LinearLayout>

Can I create something like

<ActivityBody...>
//Other elements
</ActivityBody>

Where activity body always has the ProgressBar so I can always just hide and show progress bar as needed without including the progress bar each time.

Upvotes: 1

Views: 116

Answers (1)

Anas Altair
Anas Altair

Reputation: 170

create new custom ViewGroup extends FrameLayout

like this :

public class CustomLayout extends FrameLayout {
    ProgressBar myProgressBar;
    public CustomLayout (Context context) {
        super(context);
    }

    public CustomLayout (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomLayout (Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void show() {
        if (myProgressBar == null) {
            addMyProgressBar();
        }
        myProgressBar.setVisibility(VISIBLE);
    }

    public void hide() {
        if (myProgressBar == null) {
            addMyProgressBar();
        }
        myProgressBar.setVisibility(GONE);
    }

    private void addMyProgressBar() {
        myProgressBar = new ProgressBar(getContext());
        LayoutParams params = new LayoutParams(100, 100, Gravity.CENTER);
        addView(myProgressBar, params);
    }
}

if you want to make ProgressBar always on Top:

  • edit show(), and hide() methods.
  • add removeMyProgressBar() method.

to be like this :

public void show() {
    if (myProgressBar == null)
        addMyProgressBar();
}

public void hide() {
    if (myProgressBar != null)
        removeMyProgressBar();
}

private void removeMyProgressBar() {
    if (myProgressBar != null) {
        removeView(myProgressBar);
        myProgressBar = null;
    }
}

Upvotes: 1

Related Questions