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

Android addView 動態新增元件置中問題

     編輯:程式設計綜合問答

問題現象

程式碼動態建立 FrameLayout 並用 RelativeLayout.LayoutParams 加入視圖,設定 alignWithParent=true 但元件無法水平置中。

原因分析

  • alignWithParent 已棄用,且僅影響相對於父容器邊緣的對齊,不包含置中規則。
  • 父容器為 FrameLayout,但使用 RelativeLayout.LayoutParams,型別不匹配導致佈局參數失效。

修正方案

  1. 使用 FrameLayout.LayoutParams 搭配 gravity:
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
    scrWidth, scrHeight, Gravity.CENTER); // 水平垂直置中
ShenGao.this.addContentView(mCharts[mSelected], lp);
  1. 若必須用 RelativeLayout 規則,父容器需為 RelativeLayout,並加入:
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(scrWidth, scrHeight);
lp.addRule(RelativeLayout.CENTER_HORIZONTAL); // 水平置中
lp.addRule(RelativeLayout.CENTER_VERTICAL);   // 垂直置中(可選)

關鍵提醒

  • 動態 addContentView 時,LayoutParams 必須與**父容器類型**對應,否則系統會忽略或拋出 ClassCastException。
  • alignWithParent 為舊版 API,請改用 addRule(RelativeLayout.CENTER_IN_PARENT) 或 Gravity.CENTER。

佈局參數型別匹配是動態 UI 正確渲染的前提。

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