3

我想知道为什么添加viewBinding到我的应用程序会在运行应用程序时使 XML 根目录全屏显示。在 Android Studio 的设计器视图中,根不会全屏显示。

由于根以全屏显示,我必须添加android:gravity="center"以垂直对齐中心的孩子。虽然我不认为这应该是一个问题,但我仍然有兴趣知道为什么会这样。

在此处输入图像描述

我有以下代码;

<?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)
    }
}
4

1 回答 1

1

我不确定,但我认为当您执行此操作时,setContentView(binding.root)您将线性布局设置为全屏。

setContentView Android 文档

将活动内容设置为显式视图。此视图直接放置在活动的视图层次结构中。它本身可以是一个复杂的视图层次结构。调用此方法时,会忽略指定视图的布局参数。视图的widthheight都默认设置为ViewGroup.LayoutParams#MATCH_PARENTsetContentView(android.view.View, android.view.ViewGroup.LayoutParams)要使用您自己的布局参数,请改为调用。

要让它看起来像在预览中您可以编写此代码。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)
    }
}

提示:要快速将您的布局转换为数据绑定布局,请使用:Alt+ EnterConvert to data binding layout

在此处输入图像描述

于 2020-07-29T19:40:50.263 回答