在水平线性布局中动态定位元素
Dynamically position elements in a horizontal linearlayout
使用Android API 10. 我有一个场景需要动态添加视图到水平LinearLayout
。布局应该支持 0-3 个视图,视图之间应该有一个 1px 的垂直分隔线。如果未添加视图,则应在布局的中心添加占位符文本。视图应在布局中居中
View | View | View
所以我需要一种方法来动态更新它 List<View>
实现此目标的最简单方法是什么?
如果我对你的理解正确,下面的方法应该可以满足你的要求。我们只需为 LinearLayout
中的每个 child 设置适当的 LayoutParams
,根据需要创建分隔符 View
。如果 View
s 的 List
为空,则会创建并添加占位符 TextView
。它应该适用于任意数量的 View
s.
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));
}
}
}
}
使用Android API 10. 我有一个场景需要动态添加视图到水平LinearLayout
。布局应该支持 0-3 个视图,视图之间应该有一个 1px 的垂直分隔线。如果未添加视图,则应在布局的中心添加占位符文本。视图应在布局中居中
View | View | View
所以我需要一种方法来动态更新它 List<View>
实现此目标的最简单方法是什么?
如果我对你的理解正确,下面的方法应该可以满足你的要求。我们只需为 LinearLayout
中的每个 child 设置适当的 LayoutParams
,根据需要创建分隔符 View
。如果 View
s 的 List
为空,则会创建并添加占位符 TextView
。它应该适用于任意数量的 View
s.
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));
}
}
}
}