首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 動態添加 LinearLayout 必須設置 LayoutParams 否則不顯示

     編輯:程式設計綜合問答

問題代碼


LinearLayout parentLayout = findViewById(R.id.parentLayout);
LinearLayout[] lLayout = new LinearLayout[8];
for (int i = 0; i < lLayout.length; i++) {
    lLayout[i] = new LinearLayout(this);
    lLayout[i].setId(i);
    lLayout[i].setOrientation(LinearLayout.HORIZONTAL);
    lLayout[i].setBackgroundColor(i % 2 == 0 ? Color.GREEN : Color.MAGENTA);
    parentLayout.addView(lLayout[i]); // 缺少 LayoutParams,寬高默認 0,不可見
}

根本原因

代碼創建的 LinearLayout 未設置 LayoutParams,父容器 LinearLayout(垂直)測量子視圖時,寬高均為 0,導致佈局面積為 0,肉眼不可見。

修正:添加 LayoutParams


for (int i = 0; i < lLayout.length; i++) {
    lLayout[i] = new LinearLayout(this);
    lLayout[i].setId(View.generateViewId()); // API 17+ 推薦生成唯一 ID
    lLayout[i].setOrientation(LinearLayout.HORIZONTAL);
    lLayout[i].setBackgroundColor(i % 2 == 0 ? Color.GREEN : Color.MAGENTA);

    // 關鍵:設置寬高
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT, // 寬度撐滿父容器
            200); // 固定高度 200px,或 WRAP_CONTENT
    lLayout[i].setLayoutParams(params);

    parentLayout.addView(lLayout[i]);
}

LayoutParams 選擇指南

父容器類型子視圖應用 LayoutParams 類
LinearLayoutLinearLayout.LayoutParams
RelativeLayoutRelativeLayout.LayoutParams
FrameLayoutFrameLayout.LayoutParams
ConstraintLayoutConstraintLayout.LayoutParams
ViewGroup (通用)ViewGroup.LayoutParams

進階:動態添加子視圖到新 LinearLayout


for (int i = 0; i < 8; i++) {
    LinearLayout row = new LinearLayout(this);
    row.setOrientation(LinearLayout.HORIZONTAL);
    row.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));

    // 向 row 添加 TextView 等
    for (int j = 0; j < 3; j++) {
        TextView tv = new TextView(this);
        tv.setText("Item " + i + "-" + j);
        tv.setLayoutParams(new LinearLayout.LayoutParams(
                0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)); // 權重均分
        row.addView(tv);
    }
    parentLayout.addView(row);
}

總結

**動態創建任何 View 必須顯式設置 LayoutParams**,否則寬高為 0 不可見。父容器類型決定 LayoutParams 具體類,務必匹配。善用 MATCH_PARENT、WRAP_CONTENT、權重實現彈性佈局。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved