【发布时间】:2020-08-24 23:47:10
【问题描述】:
实际代码:
我的主要活动:
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 中预览:
设备中的实际布局:
如果我把setContentView(binding.root)改成setContentView(R.layout.activity_main),Android Studio和设备的布局就一样了,当然,按钮也不起作用了……
为什么会这样?为什么ActivityMainBinding.inflate(layoutInflater) 改变布局?如何解决这个问题?
谢谢
【问题讨论】:
-
您是否将给定的 xml-Layout 用于数据绑定和普通布局膨胀?
-
@sebi0920 是的,我对两者都使用了相同的 xml 布局。
-
这是因为你的
layout_height是wrap_content而不是match_parent。 -
@EpicPandaForce 但是Android Studio中的预览显示是居中的?
-
那是因为预览用一个居中的容器包裹了你的视图,但你的视图本身没有居中。
标签: android android-layout kotlin android-viewbinding