【问题标题】:Android ViewBinding unable to render LinearLayout configurationAndroid ViewBinding 无法渲染 LinearLayout 配置
【发布时间】:2023-03-03 01:26:01
【问题描述】:

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)
}

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

ViewBinding 的实现方式是否有错误或遗漏?

【问题讨论】:

  • 我更新了我的答案。
  • 我的 recyclerview 也面临同样的问题。你解决了这个问题吗?

标签: android android-layout android-linearlayout android-viewbinding


【解决方案1】:

在您的activity_main.xml 中将id 发送给您的LinearLayout

【讨论】:

    【解决方案2】:

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

    当您执行binding.root 时,它会保留根视图的引用,在您的情况下为 LinearLayout。

    根据官方文档:

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

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

    感谢和快乐编码..!

    【讨论】:

    • 我正在使用 Android Studio 4.0。您提供的配置适用于 Android Studio 3.6。blog article by Android developers 表明 build.gradle 配置在最新版本中已更改。
    • 糟糕,我的错。感谢您让我知道。
    • 刚才试过了,还是不行。要添加更多细节,我可以使用绑定类实例来操作 ViewGroup 中的视图,例如 binding.myButton.setOnClickListener { ... }。唯一存在的问题是 ViewGroup 的布局属性的呈现
    【解决方案3】:

    遇到同样的问题,在activity_main.xml 中添加android:gravity="center_vertical"LinearLayout 解决了

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多