我想知道为什么在运行应用程序时将viewBinding添加到我的应用程序中,使XML根目录全屏显示。在Android Studio内部的设计器 View 中,根目录不会全屏显示。
由于根目录以全屏显示,因此我不得不添加android:gravity="center"以使子项在中心垂直对齐。虽然我认为这不应该是问题,但我仍然想知道为什么会这样。
android - 为什么viewBinding使XML根全屏显示-LMLPHP
我有以下代码;

<?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:gravity="center"
    android:layout_gravity="center_vertical"
    android:background="@color/colorAccent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="1"
        android:textSize="30sp" />

    <Button
        android:id="@+id/roll_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/roll"/>

</LinearLayout>
package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.diceroller.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)

        binding.rollButton.text = "testBind"
        setContentView(binding.root)
    }
}

最佳答案

我不确定,但我认为执行setContentView(binding.root)时会将线性布局设置为全屏显示。
setContentView Android Docs

要使它看起来像在预览中一样,您可以编写此代码。
XML:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:orientation="vertical"
            tools:context=".MainActivity">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="1"
                android:textSize="30sp" />

            <Button
                android:id="@+id/roll_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Roll" />

        </LinearLayout>

    </FrameLayout>

</layout>
MainActivity.kt:
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        binding = ActivityMainBinding.inflate(layoutInflater)

        binding.rollButton.text = "Test Roll"
        setContentView(binding.root)
    }
}

提示:要将布局快速转换为数据绑定(bind)布局,请使用:Alt +输入➡Convert to data binding layout android - 为什么viewBinding使XML根全屏显示-LMLPHP

10-07 22:37