为什么使用View Binding更改布局? [英] Why using View Binding is changing the layout?
问题描述
实际代码:
我的主要活动:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val rollButton = binding.rollButton
rollButton.setOnClickListener { rollDice() }
setContentView(binding.root)
}
private fun rollDice() {
val randomDiceRoll = Random.nextInt(6) + 1
Toast.makeText(this, randomDiceRoll.toString(), Toast.LENGTH_SHORT).show()
binding.resultText.text = randomDiceRoll.toString()
}
我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<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">
<TextView
android:id="@+id/result_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/count"
android:textSize="30sp" />
<Button
android:id="@+id/roll_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/roll" />
</LinearLayout>
在android studio中预览:
Preview in android studio:
设备中的实际布局:
如果将 setContentView(binding.root)
更改为 setContentView(R.layout.activity_main)
,Android Studio和设备的布局将相同,但当然,该按钮不再起作用...
If I change setContentView(binding.root)
to setContentView(R.layout.activity_main)
, the layout of Android Studio and the device become the same, but of course, the button doesn't work anymore...
为什么会这样?为什么 ActivityMainBinding.inflate(layoutInflater)
更改布局?如何解决这个问题?
Why does this happen? Why is ActivityMainBinding.inflate(layoutInflater)
changing the layout? How to fix this?
谢谢
GitHub存储库: https://github.com/Wizard28082006/Dice_Roller
GitHub Repo: https://github.com/Wizard28082006/Dice_Roller
推荐答案
如果我将setContentView(binding.root)更改为setContentView(R.layout.activity_main),则Android Studio和设备的布局将变为相同
If I change setContentView(binding.root) to setContentView(R.layout.activity_main), the layout of Android Studio and the device become the same
最可能的原因是,如果像这样对视图进行充气,则不会将容器
传递给充气器.
Most likely caused by how the container
is not passed to the inflater if the view is inflated like this.
您可以尝试以下方法:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
还有
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.bind(findViewById(R.id.root))
val rollButton = binding.rollButton
rollButton.setOnClickListener { rollDice() }
这篇关于为什么使用View Binding更改布局?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!