如何将视图绑定与线性布局一起使用?

Posted

技术标签:

【中文标题】如何将视图绑定与线性布局一起使用?【英文标题】:How to use View Binding with Linear Layout? 【发布时间】:2020-09-07 02:36:43 【问题描述】:

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

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

    <Button
        android:id="@+id/roll_button"
        android:layout_
        android:layout_
        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)

我不工作。This is how i want it to be and this is how it is present in the Design View of the xml ( I have removed text and added Image)

但是,当我运行它时,我得到了这个。 enter image description here

P.S 我刚开始学习android开发

【问题讨论】:

尝试在 LinearLayout 上使用 android:gravity="center"layout_gravity 用于视图组的子视图,但 LinearLayout 是这里的根视图。 您可以只使用 setContentView(root)。试试看。 另外,binding.roll_button 和 binding.dice_text 就足够了,你不必访问父布局来访问子布局。 【参考方案1】:

添加

android:gravity = "center"

工作!!

【讨论】:

【参考方案2】:

试试这个:

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

【讨论】:

以上是关于如何将视图绑定与线性布局一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在垂直线性布局中垂直居中视图?

如何从线性布局管理器访问新添加的视图

如何识别线性布局中一系列表格单元格的视图ID

Android水平线性布局 - 包装元素[重复]

android:如何平均划分线性布局元素

如何让视图绑定与 RecyclerView.ViewHolder 中的 XML 布局高度一起使用,就像他们对 Kotlin Synthetics 所做的那样?