View Hierarchy ( adb dumpsys ) 

Androidアプリの不具合解析等で、View Hierarchyを見ることが良くあり、見方に困ったので纏めておきます。

View Hierarchyは名前の通り、Viewの階層を表します。

取得方法は下記

```
adb shell dumpsys activity top
```

取得される内容

```
    View Hierarchy:
      DecorView@8b35a8a[MainActivity]
        android.widget.LinearLayout{aafc8fb V.E...... ........ 0,0-1080,2028}
          android.view.ViewStub{9373d18 G.E...... ......I. 0,0-0,0 #102018a android:id/action_mode_bar_stub}
          android.widget.FrameLayout{9b28371 V.E...... ........ 0,66-1080,2028}
            androidx.appcompat.widget.ActionBarOverlayLayout{f749556 V.E...... ........ 0,0-1080,1962 #7f080064 app:id/decor_content_parent}
              androidx.appcompat.widget.ContentFrameLayout{a7f9d7 V.E...... ........ 0,154-1080,1962 #1020002 android:id/content}
                androidx.constraintlayout.widget.ConstraintLayout{8ef12c4 V.E...... ........ 0,0-1080,1808}
                  android.widget.ListView{d1ae5ad VFED.VC.. .F...... 0,0-1080,1808 #7f0800c4 app:id/sampleList}
                    androidx.constraintlayout.widget.ConstraintLayout{73cb0e2 V.E...... ..S..... 0,0-1080,126}
                      androidx.appcompat.widget.AppCompatTextView{3885c73 V.ED..... ..S..... 22,22-1058,104 #7f080080 app:id/function}
                    androidx.constraintlayout.widget.ConstraintLayout{12c9730 V.E...... ........ 0,129-1080,255}
                      androidx.appcompat.widget.AppCompatTextView{52d2fa9 V.ED..... ........ 22,22-1058,104 #7f080080 app:id/function}
                    androidx.constraintlayout.widget.ConstraintLayout{e78f92e V.E...... ........ 0,258-1080,384}
                      androidx.appcompat.widget.AppCompatTextView{d024ccf V.ED..... ........ 22,22-1058,104 #7f080080 app:id/function}
                    androidx.constraintlayout.widget.ConstraintLayout{47bf65c V.E...... ........ 0,387-1080,513}
                      androidx.appcompat.widget.AppCompatTextView{5001d65 V.ED..... ........ 22,22-1058,104 #7f080080 app:id/function}
              androidx.appcompat.widget.ActionBarContainer{b1f7a3a V.ED..... ........ 0,0-1080,154 #7f08002a app:id/action_bar_container}
                androidx.appcompat.widget.Toolbar{680e6eb V.E...... ........ 0,0-1080,154 #7f080028 app:id/action_bar}
                  androidx.appcompat.widget.AppCompatTextView{1c48 V.ED..... ........ 44,40-651,114}
                  androidx.appcompat.widget.ActionMenuView{5a2ae1 V.E...... ........ 1080,0-1080,154}
                androidx.appcompat.widget.ActionBarContextView{a7b0006 G.E...... ......I. 0,0-0,0 #7f080030 app:id/action_context_bar}
        android.view.View{b0506c7 V.ED..... ........ 0,2028-1080,2160 #1020030 android:id/navigationBarBackground}
        android.view.View{e1eb4f4 V.ED..... ........ 0,0-1080,66 #102002f android:id/statusBarBackground}
```

上記のView Hierarchyは、下記の画面を表示時に取得したものです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254520/215b2567-cf9b-f038-306e-7c53c1eb5041.png" width=30%>

View HierarchyからもListViewが表示されていることがわかります。

```
android.widget.ListView{d1ae5ad VFED.VC.. .F...... 0,0-1080,1808 #7f0800c4 app:id/sampleList}
```

さらに表示されているViewの状態もわかります。

```
android.widget.ListView    // クラス名
{
d1ae5ad                    // HashCode
 
V                          // Visibility (V, I, G)
F                          // FOCUSABLE (F=true, .=false)
E                          // ENABLED (E=true, .=false)
D                          // draw (.=not draw, D=draw)
.                          // SCROLLBARS_HORIZONTAL (H=true, .=false)
V                          // SCROLLBARS_VERTICAL (V=true, .=false)
C                          // CLICKABLE (C=true, .=false)
.                          // LONG_CLICKABLE (L=true, .=false)
.                          // CONTEXT_CLICKABLE (X=true, .=false)
 
.                          // PFLAG_IS_ROOT_NAMESPACE (R=true, .=false)
F                          // PFLAG_FOCUSED (F=true, .=false)
.                          // PFLAG_SELECTED (S=true, .=false)
.                          // PFLAG_PREPRESSED (p) / PFLAG_PRESSED (P=true, .=false)
.                          // PFLAG_HOVERED (H=true, .=false)
.                          // PFLAG_ACTIVATED (A=true, .=false)
.                          // PFLAG_INVALIDATED (I=true, .=false)
.                          // PFLAG_DIRTY_MASK (D=true, .=false)
 
0, 0                       // mLeft, mTop
-
1080, 1808                 // mRight, mBottom
 
#7f0800c4                  // mID
 
app:id/sampleList          // PackageName
}
```

# 参考
dumpsys : https://developer.android.com/studio/command-line/dumpsys?hl=ja
View : https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/View.java;l=6440?q=view.java&ss=android%2Fplatform%2Fsuperproject&hl=ja