在日常開發(fā)中時(shí)常會需要判斷某個(gè)view是否顯示财边,常用的無非就兩種:
view.getVisibility()
view.isShown()
這兩種方式有沒有區(qū)別呢围苫?當(dāng)然有俄精。
結(jié)論:前者只返回view本身的visibility刁笙,后者返回view本身visibility與它ancestors的visibility綜合之后的結(jié)果改橘。
看例子:
<LinearLayout
android:id="@+id/llParent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dialog_btn_txt_color"
android:orientation="vertical"
android:padding="@dimen/activity_horizontal_margin">
<TextView
android:id="@+id/txtChild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/gray"
android:padding="@dimen/activity_horizontal_margin"
android:text="child" />
</LinearLayout>
代碼都簡單的很滋尉,不貼了,直接看log吧飞主。
E/Visibility: llParent.getVisibility() --> INVISIBLE
E/Visibility: llParent.isShown() --> false
E/Visibility: txtChild.getVisibility() --> VISIBLE
E/Visibility: txtChild.isShown() --> false
E/Visibility: llParent.getVisibility() --> INVISIBLE
E/Visibility: llParent.isShown() --> false
E/Visibility: txtChild.getVisibility() --> INVISIBLE
E/Visibility: txtChild.isShown() --> false
parent是INVISIBLE的狮惜,不管child的Visibility如何變化,txtChild.isShown()都返回false碌识。
E/Visibility: llParent.getVisibility() --> VISIBLE
E/Visibility: llParent.isShown() --> true
E/Visibility: txtChild.getVisibility() --> VISIBLE
E/Visibility: txtChild.isShown() --> true
E/Visibility: llParent.getVisibility() --> VISIBLE
E/Visibility: llParent.isShown() --> true
E/Visibility: txtChild.getVisibility() --> INVISIBLE
E/Visibility: txtChild.isShown() --> false
parent和child都是VISIBLE的碾篡, txtChild.isShown()才返回true。
總結(jié)成一句話就是筏餐,要判斷用戶能否看見某個(gè)view开泽,應(yīng)使用isShown()。