在水平线性布局中动态定位元素

Dynamically position elements in a horizontal linearlayout

使用Android API 10. 我有一个场景需要动态添加视图到水平LinearLayout。布局应该支持 0-3 个视图,视图之间应该有一个 1px 的垂直分隔线。如果未添加视图,则应在布局的中心添加占位符文本。视图应在布局中居中

 View | View | View

所以我需要一种方法来动态更新它 List<View>

实现此目标的最简单方法是什么?

如果我对你的理解正确,下面的方法应该可以满足你的要求。我们只需为 LinearLayout 中的每个 child 设置适当的 LayoutParams,根据需要创建分隔符 View。如果 Views 的 List 为空,则会创建并添加占位符 TextView。它应该适用于任意数量的 Views.

private void populateLayout(LinearLayout layout, List<View> views) {
    LinearLayout.LayoutParams lp;
    int numViews = views.size();

    layout.removeAllViews();

    if (numViews == 0) {
        TextView placeholder = new TextView(layout.getContext());
        placeholder.setGravity(Gravity.CENTER);
        placeholder.setText("Placeholder");

        lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT);

        layout.addView(placeholder, lp);
    }
    else {
        layout.setGravity(Gravity.CENTER_VERTICAL);
        lp = new LinearLayout.LayoutParams(
            0,
            LinearLayout.LayoutParams.MATCH_PARENT,
            1);

        for (int i = 0; i < numViews; i++) {
            layout.addView(views.get(i), lp);

            if (numViews - i > 1) {
                View divider = new View(layout.getContext());
                divider.setBackgroundColor(Color.BLACK);
                layout.addView(divider,
                               new LinearLayout.LayoutParams(
                                   1,
                                   LinearLayout.LayoutParams.MATCH_PARENT));
            }
        }
    }
}