getParent()与getRootView()

getParent()getRootView() 都是View类下的方法,返回的返回的是一个view

getParent()

从名字上来理解, getParent() 是获得它的父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。我使用getParent()看一下结果

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

不断的用getParent() 来寻找父View,找了这么多可算给我找完了(没错我就是吃饱啦撑的)。

我们可以看见这有好多层,最后是一个DecorView。 使用view.getRootView()直接得到DecorView。要想知道为什么有这么多层,可以去学习一下View的绘制流程。

getRootView()

返回当前View的根布局。
像上面的结果一样,所有的View都是一层包着一层的,所有必然有一个在最外面,这个返回的就是最外面的那个。

如果已经是最外面的了,就返回自己。

  View v = LayoutInflater.from(this).inflate(R.layout.view, null);
  v.getRootView(); //返回自己的类型,因为这个布局加载的时候没有指定父布局,所以他是个孤儿,只能返回自己。

你可能感兴趣的:(java)