Android ViewBinding无法呈现线性布局配置

pbpqsu0x  于 2023-01-04  发布在  Android
关注(0)|答案(4)|浏览(153)

ViewBinding实现无法呈现我的代码中使用的LinearLayout的布局配置,而相同的布局可以使用findViewById()的旧技术
我已将gradle设置为使用ViewBinding

android {
    ...
    buildFeatures {
        viewBinding = true
}

以下是使用LinearLayout的活动

活动_主要.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()

主要活动.kt

private lateinit var binding: ActivityMainBinding

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

    setContentView(binding.root)
}

虽然布局编辑器呈现应用的正确对齐方式,但一旦应用启动到模拟器上,布局配置(例如使用layout_gravityLinearLayout设置的center_vertical对齐方式)将被忽略。
ViewBinding的实现方式是否存在错误或缺失?

arknldoa

arknldoa1#

activity_main.xml中,将id给予为LinearLayout

nimxete2

nimxete22#

有一种可能性是您的LinearLayout没有任何id
当你在做binding.root的时候,它会保持一个根视图的引用,在你的例子中是LinearLayout。
根据官方文件:
如果为模块启用了视图绑定,则会为模块包含的每个XML布局文件生成一个绑定类。每个绑定类都包含对根视图和所有具有ID的视图的引用。
给你的LinearLayout android:id="rootView一个ID,重建你的项目并尝试运行。我希望,它能解决你的问题。
谢谢&快乐编码..!

vnzz0bqm

vnzz0bqm3#

存在相同问题,通过将android:gravity="center_vertical"添加到activity_main.xml中的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>
zqry0prt

zqry0prt4#

我在做“用Kotlin开发Android应用程序”课程的练习时也遇到了同样的问题。
我没有找到解决方案,因为我假设如果不使用视图绑定,则必须将main_activity. xml中的视图之上的视图作为根(可能是同样的全屏),所以当使用没有视图绑定的layout_gravity时,它工作,因为它相对于屏幕定位了LinearLayout,然而,当使用视图绑定时,我假设它以LinearLayout为根,所以layout_gravity什么也不做(同样,我不确定,我不太了解视图绑定是如何工作的)。
我使用的解决方案是简单地尝试用不同的东西来实现相同的视图。为此,我在activity_main. xml中使用了:

android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical"
tools:context=".MainActivity">

相关问题