int visibility = view.getVisibility(); // 返回 int 常量
if (visibility == View.VISIBLE) {
// 可見,佔據佈局空間
} else if (visibility == View.INVISIBLE) {
// 不可見,但佔據佈局空間
} else if (visibility == View.GONE) {
// 不可見,不佔據佈局空間
}
| 常量 | 值 | 可見性 | 佔用空間 | 觸摸事件 | 動畫建議 |
|---|---|---|---|---|---|
View.VISIBLE | 0 | ✅ | ✅ | ✅ | fade out → INVISIBLE/GONE |
View.INVISIBLE | 4 | ❌ | ✅ | ❌ | fade in → VISIBLE |
View.GONE | 8 | ❌ | ❌ | ❌ | 展開動畫 → VISIBLE |
// 簡單切換
view.setVisibility(view.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
// 明確設置
showView(view); // view.setVisibility(View.VISIBLE);
hideView(view); // view.setVisibility(View.GONE); // 通常用 GONE
// 淡出並 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();
... />
// 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