【问题标题】:Reusable View Groups可重用的视图组
【发布时间】:2023-03-27 05:31:01
【问题描述】:

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

例如,

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

我可以创建类似的东西

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

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

【问题讨论】:

标签: android android-layout android-viewgroup


【解决方案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 总是在顶部:

  • 编辑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;
    }
}

【讨论】:

  • 这应该被标记为接受的答案。我按照这里的步骤并根据自己的目的对其进行了修改,这是解决我的问题的完美指南。
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多