android - viewBinding为什么让XML根全屏

标签 android android-studio android-layout kotlin android-viewbinding

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

由于根目录以全屏显示,我不得不添加 android:gravity="center" 以垂直对齐居中的子项。虽然我不认为这应该是个问题,但我仍然想知道为什么会这样。

enter image description here

我有以下代码;

<?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

Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy. It can itself be a complex view hierarchy. When calling this method, the layout parameters of the specified view are ignored. Both the width and the height of the view are set by default to ViewGroup.LayoutParams#MATCH_PARENT. To use your own layout parameters, invoke setContentView(android.view.View, android.view.ViewGroup.LayoutParams) instead.

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

主要 Activity .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 + EnterConvert to data binding layout

enter image description here

关于android - viewBinding为什么让XML根全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63160698/

相关文章:

android - 构建 NDK 示例时出现意外的顶级异常

android - Flutter 运行发布失败 : Minimum supported Gradle version is 5. 6.4。当前版本是 5.6.2

android - ActionBarCompat + 抽屉导航 fragment 不适用于 android 4.0 和 4.1

android - 如何在线性布局中居中相对布局

android - 我怎样才能减少 margin ?

android - 自定义进度条中的圆形渐变

php - 我想知道是否有一种方法可以显示android studio中当前日志的特定数据和使用mysql数据库的用户

java - 将 XML 文件发送到 Android 中的 Web 服务器

java - 无法从 ArrayList 获取数据

android-studio - 下载 Android Studio 的构建工具