我不明白 inflate 方法的第三个参数 true 和 false 之间的主要区别
I don't understand the main difference between true of false for the third parameters of inflate method
我不明白inflate方法的第三个参数true和false的主要区别,
任何有用的例子。
假设我们有这个非常简单的布局:
view_red_square.xml
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#FA8072" />
我们主要使用的布局activity:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
现在让我们尝试膨胀 MainActivity
中的 view_red_square.xml
布局并了解会发生什么。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val container = findViewById<FrameLayout>(R.id.container)
val inflatedView = layoutInflater.inflate(R.layout.view_red_square, container, false)
Toast.makeText(this, "Is the view inflated: $inflatedView", Toast.LENGTH_SHORT).show()
}
}
LayoutInflater.inflate
的第三个布尔参数,作为文档点,代表:
attachToRoot: Whether the inflated hierarchy should be attached to
the root parameter? If false, root is only used to create the
correct subclass of LayoutParams for the root view in the XML.
所以,回到我们的主要 activity。 false
布尔值表示不应将膨胀的视图添加到 root
,也在 inflate 方法中指定。
使用上面的代码 MainActivity
。我们可以使用布局检查器验证在将 attachToRoot
设置为 false
.
的视图进行膨胀时,视图未添加到容器中
将视图添加到我们的容器的解决方案是使用 container.addView(inflatedView)
.
手动将视图添加到我们的视图组
现在让我们看看当我们将 attachToRoot
布尔值切换为 true
时会发生什么。让我们再次使用布局检查器。
val inflatedView = layoutInflater.inflate(R.layout.view_red_square, container, true)
如您所见,视图现在已添加到我们的容器 root
中。因此,我们可以得出结论 attachToRoot
,如果其值为 true
.
,则将膨胀视图添加到给定的根
我不明白inflate方法的第三个参数true和false的主要区别, 任何有用的例子。
假设我们有这个非常简单的布局:
view_red_square.xml
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#FA8072" />
我们主要使用的布局activity:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
现在让我们尝试膨胀 MainActivity
中的 view_red_square.xml
布局并了解会发生什么。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val container = findViewById<FrameLayout>(R.id.container)
val inflatedView = layoutInflater.inflate(R.layout.view_red_square, container, false)
Toast.makeText(this, "Is the view inflated: $inflatedView", Toast.LENGTH_SHORT).show()
}
}
LayoutInflater.inflate
的第三个布尔参数,作为文档点,代表:
attachToRoot: Whether the inflated hierarchy should be attached to the root parameter? If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML.
所以,回到我们的主要 activity。 false
布尔值表示不应将膨胀的视图添加到 root
,也在 inflate 方法中指定。
使用上面的代码 MainActivity
。我们可以使用布局检查器验证在将 attachToRoot
设置为 false
.
将视图添加到我们的容器的解决方案是使用 container.addView(inflatedView)
.
现在让我们看看当我们将 attachToRoot
布尔值切换为 true
时会发生什么。让我们再次使用布局检查器。
val inflatedView = layoutInflater.inflate(R.layout.view_red_square, container, true)
如您所见,视图现在已添加到我们的容器 root
中。因此,我们可以得出结论 attachToRoot
,如果其值为 true
.