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

Android LinearLayout visibility="invisible" 仍佔用空間:改用 gone 徹底隱藏

     編輯:程式設計綜合問答

現象

設置 android:visibility="invisible" 後,LinearLayout 不可見但仍佔據佈局空間,導致其他視圖位置偏移。

根本原因:三種可見性模式區別

屬性值可見性佔用佈局空間觸摸事件
visible (默認)可見是接收
invisible不可見是 (佔位)不接收
gone不可見否 (不佔位)不接收

解決方案:使用 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
  • ✅ 明確語義:佔位隱藏用 invisible,完全移除用 gone
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved