【问题标题】: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_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)

我不工作。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 就足够了,你不必访问父布局来访问子布局。

标签: android android-layout kotlin android-linearlayout android-viewbinding


【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多