2

ViewBinding 实现无法呈现LinearLayout在我的代码中使用的布局配置,而相同的布局适用于旧的技术findViewById()

我已经设置了 gradle 以使用 ViewBinding

android {
    ...
    buildFeatures {
        viewBinding = true
}

以下是使用LinearLayout

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    tools:context=".MainActivity">

  <ImageView
        ... />

  <Button
        ... />

</LinearLayout>

对应的 Kotlin 类包括绑定实例及其根视图传递给setContentView()

MainActivity.kt

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    ...

    setContentView(binding.root)
}

虽然布局编辑器呈现应用程序的正确对齐方式,但一旦将其启动到模拟器上,布局配置(例如使用ofcenter_vertical设置的对齐方式)将被忽略。layout_gravityLinearLayout

ViewBinding 的实现方式是否不正确或缺失?

4

3 回答 3

2

在你activity_main.xmlid你的LinearLayout

于 2020-06-03T14:32:56.793 回答
1

有一种可能是您LinearLayout没有任何id.

当您这样做binding.root时,它会保留根视图的引用,在您的情况下是 LinearLayout 。

根据官方文档:

如果为模块启用了视图绑定,则会为模块包含的每个 XML 布局文件生成一个绑定类。每个绑定类都包含对根视图和所有具有 ID 的视图的引用。

为您的 LinearLayout 提供 id android:id="rootView,重建您的项目并尝试运行。我希望,它会解决你的问题。

谢谢和快乐编码..!

于 2020-06-03T02:10:57.177 回答
0

有同样的问题,通过添加android:gravity="center_vertical"解决LinearLayoutactivity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:id="@+id/root_view"
    tools:context=".MainActivity">

</LinearLayout>
于 2020-08-05T03:59:00.567 回答