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_gravity
或LinearLayout
设置的center_vertical
对齐方式)将被忽略。
ViewBinding的实现方式是否存在错误或缺失?
4条答案
按热度按时间arknldoa1#
在
activity_main.xml
中,将id
给予为LinearLayout
nimxete22#
有一种可能性是您的
LinearLayout
没有任何id
。当你在做
binding.root
的时候,它会保持一个根视图的引用,在你的例子中是LinearLayout。根据官方文件:
如果为模块启用了视图绑定,则会为模块包含的每个XML布局文件生成一个绑定类。每个绑定类都包含对根视图和所有具有ID的视图的引用。
给你的LinearLayout
android:id="rootView
一个ID,重建你的项目并尝试运行。我希望,它能解决你的问题。谢谢&快乐编码..!
vnzz0bqm3#
存在相同问题,通过将
android:gravity="center_vertical"
添加到activity_main.xml
中的LinearLayout
解决zqry0prt4#
我在做“用Kotlin开发Android应用程序”课程的练习时也遇到了同样的问题。
我没有找到解决方案,因为我假设如果不使用视图绑定,则必须将main_activity. xml中的视图之上的视图作为根(可能是同样的全屏),所以当使用没有视图绑定的layout_gravity时,它工作,因为它相对于屏幕定位了LinearLayout,然而,当使用视图绑定时,我假设它以LinearLayout为根,所以layout_gravity什么也不做(同样,我不确定,我不太了解视图绑定是如何工作的)。
我使用的解决方案是简单地尝试用不同的东西来实现相同的视图。为此,我在activity_main. xml中使用了: