點擊 TextView 觸發 OnClickListener 內部轉換 LayoutParams 崩潰:ClassCastException: RelativeLayout$LayoutParams cannot be cast to ActionBar$LayoutParams。
程式碼嘗試將 LinearLayout 的 LayoutParams 強轉為 ActionBar.LayoutParams:
// 錯誤程式碼
LayoutParams lp = (LayoutParams) contenitore_cibo_l.getLayoutParams();
// 此處 LayoutParams 為 android.app.ActionBar.LayoutParams (因 import 錯誤)
// 實際 contenitore_cibo_l 是 LinearLayout,其 LayoutParams 為 LinearLayout.LayoutParams
// 正確 import
import android.widget.LinearLayout.LayoutParams; // 或 RelativeLayout.LayoutParams
// 程式碼
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) contenitore_cibo_l.getLayoutParams();
// 或直接用 ViewGroup.LayoutParams (父介面,僅含 width/height)
ViewGroup.LayoutParams lp = contenitore_cibo_l.getLayoutParams();
| 父容器類型 | 對應 LayoutParams 類別 | 常用屬性 |
|---|---|---|
| LinearLayout | LinearLayout.LayoutParams | weight, gravity, margin |
| RelativeLayout | RelativeLayout.LayoutParams | rules (ALIGN_PARENT_LEFT 等), margin |
| FrameLayout | FrameLayout.LayoutParams | gravity, margin |
| ConstraintLayout | ConstraintLayout.LayoutParams | constraints, bias, margin |
| ActionBar | ActionBar.LayoutParams | gravity, customView 相關 |
import android.view.ViewGroup.LayoutParams 後再強轉子類。Alt+Enter 選擇正確類別。val lp = view.layoutParams as LinearLayout.LayoutParams 編譯期即報錯。ViewGroup.LayoutParams。LayoutParams 類型錯誤是 Android 開發高頻低級錯誤,養成「看父容器決定 LayoutParams 類型」的肌肉記憶即可杜絕。