get Partent()とget RootView()

11095 ワード

get Partent()とget RootView()はすべてViewの種類の下の方法で、帰ってくるのは1つのviewです。
get Partent()
名前から理解すると、getPartent()は父Viewを獲得しています。彼が父Viewを持っていないとnullに戻ります。
くりを一つあげる:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginTop="56dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.212"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
androidx.constraintlayout.widget.ConstraintLayout>
ここでは制約配置でImageViewを定義した。私はget Part()を使って結果を見ます。
view=findViewById(R.id.image) //ImageView   
view.getParent();  
//androidx.constraintlayout.widget.ConstraintLayout

view.getParent().getParent().getParent();
//androidx.appcompat.widget.ContentFrameLayout

view.getParent().getParent().getParent().getParent();
//androidx.appcompat.widget.ActionBarOverlayLayout

view.getParent().getParent().getParent().getParent().getParent();
//android.widget.FrameLayout

view.getParent().getParent().getParent().getParent().getParent().getParent();
//android.widget.LinearLayout

view.getParent().getParent().getParent().getParent().getParent().getParent().getParent();
//DecorView
父ViewをgetPartent()で探し続けています。こんなにたくさん探してくれたら、見つけられます。
私たちはこれが何階もあるのを見ることができます。最後はDecorViewです。view.getRoot View()を使って直接DecorViewを得る。なぜこんなに重層なのかを知りたいなら、Viewの制作プロセスを勉強してもいいです。
get Root View()
現在のビューのルートレイアウトを返します。上の結果のように、すべてのビューは1階に包まれています。すべては必ず一番外にあります。これは一番外に帰ります。
もう一番外だったら、自分に帰ります。
  View v = LayoutInflater.from(this).inflate(R.layout.view, null);
  v.getRootView(); //       ,                  ,       ,      。