動態新增多個 ImageView 到 RelativeLayout,後來者覆蓋前者,因預設都置於左上角。
RelativeLayout container = findViewById(R.id.container);
int prevId = 0; // 用於 RIGHT_OF 參考
for (int i = 0; i < count; i++) {
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.icon);
int id = View.generateViewId();
iv.setId(id);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
if (prevId != 0) {
lp.addRule(RelativeLayout.RIGHT_OF, prevId); // 放在前一個右側
// 或 lp.addRule(RelativeLayout.BELOW, prevId); // 放在下方
} else {
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // 第一個靠左
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
}
container.addView(iv, lp);
prevId = id; // 更新參考
}
| 規則常數 | 效果 |
|---|---|
RIGHT_OF | 置於指定 ID 視圖右側 |
LEFT_OF | 置於指定 ID 視圖左側 |
BELOW | 置於指定 ID 視圖下方 |
ABOVE | 置於指定 ID 視圖上方 |
ALIGN_PARENT_LEFT/RIGHT/TOP/BOTTOM | 靠父佈局邊緣 |
CENTER_IN_PARENT | 置中於父佈局 |
LinearLayout(horizontal)自動依序排列,無需手動管理規則。FlowLayout 支援自動換行,適合標籤雲、圖片牆。