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

Android 代碼動態設置 ImageView gravity:LayoutParams 而非 View.setGravity

     編輯:程式設計綜合問答

誤區:嘗試調用 ImageView.setGravity(Gravity.CENTER) 來居中圖片,但 View.setGravity() 僅影響**容器內子 View 的佈局**,不影響 View 內容(如圖片)的對齊。

正確方案:通過 LayoutParams 設置

在將 ImageView 添加到父容器(如 LinearLayout、FrameLayout)時,設置 LayoutParams.gravity:

ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.icon);

// 關鍵:根據父容器類型選擇正確的 LayoutParams
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, 
    LayoutParams.WRAP_CONTENT
);
params.gravity = Gravity.CENTER; // 或 Gravity.CENTER_HORIZONTAL / VERTICAL

parentLayout.addView(imageView, params);

父容器類型對應的 LayoutParams

父容器LayoutParams 類
LinearLayoutLinearLayout.LayoutParams
RelativeLayoutRelativeLayout.LayoutParams
FrameLayoutFrameLayout.LayoutParams
ConstraintLayoutConstraintLayout.LayoutParams

圖片在 ImageView 內部居中(內容對齊)

若需圖片在 ImageView 邊界內居中,使用 setScaleType:

imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); // 或 CENTER, FIT_CENTER 等

完整示例:動態創建 3x3 圖標網格,每個圖標居中

GridLayout grid = new GridLayout(this);
grid.setColumnCount(3);
grid.setRowCount(3);

for (int i = 0; i < 9; i++) {
    ImageView iv = new ImageView(this);
    iv.setImageResource(R.drawable.icon);
    iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    
    GridLayout.LayoutParams lp = new GridLayout.LayoutParams();
    lp.width = 0; lp.height = 0; // 佔比分配
    lp.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f);
    lp.rowSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f);
    lp.setGravity(Gravity.CENTER); // 在網格單元格內居中
    
    grid.addView(iv, lp);
}
setContentView(grid);

區分「View 在容器中的位置」與「內容在 View 內的對齊」,精準控制佈局。

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