設置 android:visibility="invisible" 後,LinearLayout 不可見但仍佔據佈局空間,導致其他視圖位置偏移。
| 屬性值 | 可見性 | 佔用佈局空間 | 觸摸事件 |
|---|---|---|---|
visible (默認) | 可見 | 是 | 接收 |
invisible | 不可見 | 是 (佔位) | 不接收 |
gone | 不可見 | 否 (不佔位) | 不接收 |
android:layout_width="wrap_content"
android:layout_height="wrap_content">
...
// 代碼動態控制
linearLayout.setVisibility(View.GONE); // 隱藏且不佔位
linearLayout.setVisibility(View.VISIBLE); // 顯示
// linearLayout.setVisibility(View.INVISIBLE); // 隱藏但佔位
若需展開/收起動畫,配合 VisibilityAnimation 或自定義動畫:
// 簡單展開動畫 (從 gone 到 visible)
linearLayout.setVisibility(View.VISIBLE);
linearLayout.animate()
.alpha(1f)
.setDuration(300)
.start();
// 收起動畫 (從 visible 到 gone)
linearLayout.animate()
.alpha(0f)
.setDuration(300)
.withEndAction(() -> linearLayout.setVisibility(View.GONE))
.start();
invisible 等同 gone → 導致佈局留白GONE → 仍佔位、觸摸穿透問題ConstraintLayout 中用 gone 但未設置約束 → 視圖消失後約束鏈斷裂,需用 goneMargin 或 Barrier