可重复使用的视图组

时间:2016-11-15 15:57:04

标签: android android-layout android-viewgroup

我的应用程序中的大多数页面都有一个进度条实现。 我想创建一个自定义视图组,它始终包含一个进度条。

例如,

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

我可以创建类似

的内容吗?
<ActivityBody...>
//Other elements
</ActivityBody>

活动主体总是有ProgressBar,所以我总是可以根据需要隐藏和显示进度条,而不必每次都包含进度条。

1 个答案:

答案 0 :(得分:1)

创建新的自定义ViewGroup扩展 FrameLayout

像这样:

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

如果您想让ProgressBar始终位于Top:

  • 修改show()hide()方法。
  • 添加removeMyProgressBar()方法。

是这样的:

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

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

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