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

Android 判斷 View 可見狀態:getVisibility() 與 VISIBLE/INVISIBLE/GONE 比較

     編輯:程式設計綜合問答

核心 API


int visibility = view.getVisibility(); // 返回 int 常量

if (visibility == View.VISIBLE) {
    // 可見,佔據佈局空間
} else if (visibility == View.INVISIBLE) {
    // 不可見,但佔據佈局空間
} else if (visibility == View.GONE) {
    // 不可見,不佔據佈局空間
}

三種狀態對比表

常量值可見性佔用空間觸摸事件動畫建議
View.VISIBLE0✅✅✅fade out → INVISIBLE/GONE
View.INVISIBLE4❌✅❌fade in → VISIBLE
View.GONE8❌❌❌展開動畫 → VISIBLE

常用模式

1. 切換可見性


// 簡單切換
view.setVisibility(view.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);

// 明確設置
showView(view);   // view.setVisibility(View.VISIBLE);
hideView(view);   // view.setVisibility(View.GONE); // 通常用 GONE

2. 動畫配合


// 淡出並 Gone
view.animate()
    .alpha(0f)
    .setDuration(300)
    .withEndAction(() -> view.setVisibility(View.GONE))
    .start();

// 從 Gone 淡入
view.setAlpha(0f);
view.setVisibility(View.VISIBLE);
view.animate()
    .alpha(1f)
    .setDuration(300)
    .start();

3. XML 佈局初始狀態



    ... />

進階:View.isShown() vs getVisibility()


// isShown() 綜合判斷:View 及其所有父視圖均 VISIBLE,且附著於窗口
boolean trulyVisible = view.isShown(); // true = 用戶實際可見

// getVisibility() 僅反映自身屬性
int selfVisibility = view.getVisibility(); // 可能 VISIBLE 但父視圖 GONE

用途區分:佈局邏輯用 getVisibility(),用戶可見性統計/截圖判斷用 isShown()。

常見誤區

  • ❌ if (view.getVisibility()) → VISIBLE=0 為 false,邏輯反轉
  • ❌ 以為 INVISIBLE 不佔空間 → 實際佔位,用 GONE 才不佔位
  • ❌ 動畫結束忘記設置 GONE → 透明但仍佔位、阻擋點擊
  • ✅ 習慣用 View.VISIBLE/INVISIBLE/GONE 常量,勿硬編碼 0/4/8
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved