0

我有一个看起来像这样的activity_main.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:orientation="vertical"
    android:layout_gravity="center"
    tools:context=".MainActivity"
    android:id="@+id/main_linear_layout">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:layout_gravity="center_horizontal"
        android:textSize="30sp"
        android:id="@+id/dice_text"/>

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

因此,当我尝试创建视图绑定并在 Activity 文件中使用它时,类 MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    val root = binding.root
    setContentView(root.main_linear_layout)
    buttonClicked()
}

fun buttonClicked(): Unit {
    val roll_button = binding.mainLinearLayout.roll_button
    val text = binding.mainLinearLayout.dice_text
    roll_button.setOnClickListener {
        var randomNumber = Random().nextInt(6)+1
        text.text = randomNumber.toString()
    }
}

}

我有一些问题。自然,由于线性布局将 layout_gravity 设置为 center,因此它应该在屏幕中居中,无论是垂直还是水平。在 xml 的设计编辑器中就是这种情况,它应该是这样的。

但是当我运行应用程序时,在我的手机中,文本和按钮都会对齐 center_horizo​​ntal 但不是垂直对齐。

我也尝试给 center_vertical 但不起作用。

但是,如果我不使用视图绑定并使用 findViewById ,它就可以正常工作。

编辑:我已经从绑定中删除了 mainLinearLayout。所以它只是

setContentView(root)

我不工作。这就是我想要的样子,这就是它在 xml 的设计视图中的呈现方式(我已经删除了文本并添加了图像)

但是,当我运行它时,我得到了这个。在此处输入图像描述

PS我刚开始学习android开发

4

2 回答 2

2

添加

android:gravity = "center"

工作!

于 2020-05-21T08:20:59.643 回答
0

尝试这个 :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)
    val root = binding.root
    setContentView(root)
    buttonClicked()
}

来源:https ://developer.android.com/topic/libraries/view-binding#activities

于 2020-05-30T16:44:39.303 回答