如何将视图绑定与线性布局一起使用?
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_horizontal 但不是垂直对齐。
我也试过给 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
【讨论】:
以上是关于如何将视图绑定与线性布局一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何让视图绑定与 RecyclerView.ViewHolder 中的 XML 布局高度一起使用,就像他们对 Kotlin Synthetics 所做的那样?