如何使用线性布局的视图绑定?

问题描述 投票:0回答:1

我有一个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文件中使用它时,class 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设置为居中,它应该在屏幕上居中,无论是垂直还是水平方向。这是在xml设计编辑器中的情况,它应该是这样的。

但当我运行这个应用时,在我的手机上,文本和按钮都是居中对齐,但不是垂直对齐。

我试着把中心_垂直也对齐,但没有用。

但如果我不使用视图绑定,而是使用findViewById,就能正常工作。

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

setContentView(root)

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

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

P.S我刚开始学习安卓系统的开发。

android android-layout kotlin android-linearlayout android-viewbinding
1个回答
0
投票

添加

android:gravity = "center"

成功了!!


0
投票

试试这个:

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

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

源。https:/developer.android.comtopiclibrariesview-binding#activities

© www.soinside.com 2019 - 2024. All rights reserved.