需求:Java/Kotlin 代碼中動態設置 View 的 `android:layout_centerHorizontal="true"` 效果。
// 獲取或創建 LayoutParams(必須匹配父容器類型)
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) textView.getLayoutParams();
if (params == null) {
params = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
// 關鍵:添加居中規則
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
// 應用
textView.setLayoutParams(params);
| 父容器 | LayoutParams 類 | 居中常量 |
|---|---|---|
| RelativeLayout | RelativeLayout.LayoutParams | CENTER_HORIZONTAL, CENTER_VERTICAL, CENTER_IN_PARENT |
| LinearLayout | LinearLayout.LayoutParams | gravity = Gravity.CENTER_HORIZONTAL |
| FrameLayout | FrameLayout.LayoutParams | gravity = Gravity.CENTER_HORIZONTAL |
| ConstraintLayout | ConstraintLayout.LayoutParams | ConstraintSet.CENTER_HORIZONTALLY |
TextView tv = new TextView(this);
tv.setText("Dynamic Centered");
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
lp.addRule(RelativeLayout.CENTER_VERTICAL); // 同時垂直居中
RelativeLayout root = findViewById(R.id.root);
root.addView(tv, lp);
掌握 `LayoutParams.addRule()`,靈活動態控制 RelativeLayout 子 View 位置。