元素将无法在Constraintlayout Android Studio中正确居中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元素将无法在Constraintlayout Android Studio中正确居中相关的知识,希望对你有一定的参考价值。

我有这样一个闪屏:

但如果我打开我的应用程序,它将显示如下:

enter image description here

这是我的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_red_light"
tools:context=".SplashScreen">

<ImageView
    android:id="@+id/splash_icon"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_marginTop="160dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.0"
    app:srcCompat="@mipmap/ic_concas_icon" />

<TextView
    android:id="@+id/splash_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="28dp"
    android:text="GO Tools"
    android:textColor="@android:color/white"
    android:textSize="48sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="@+id/splash_icon"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="@+id/splash_icon"
    app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

<ProgressBar
    android:id="@+id/splash_progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="136dp"
    app:layout_constraintEnd_toEndOf="@+id/splash_icon"
    app:layout_constraintHorizontal_bias="0.506"
    app:layout_constraintStart_toStartOf="@+id/splash_icon"
    app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

<TextView
    android:id="@+id/splash_status"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="204dp"
    android:text="STATUS"
    android:textAlignment="center"
    android:textColor="@android:color/white"
    android:textSize="18sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="@+id/splash_icon"
    app:layout_constraintHorizontal_bias="0.508"
    app:layout_constraintStart_toStartOf="@+id/splash_icon"
    app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

我需要像Android Studio预览一样正确放置元素但是如果我启动我的应用程序仍然无法正常工作。有人知道怎么做吗?非常感谢!

编辑:图像将无法加载,但它已正确设置。

答案

看起来你的布局还可以,但是如果你想让你的图像更多地显示在屏幕的顶部,你需要更改它,现在你要告诉你的图像居中于屏幕的中间,这样你所有的其他视图将放置在低于您的图像。一个好的解决方案是添加指南并将图像限制在指南而不是屏幕的顶部(这样您的图像将放置得更高,它将改变您的布局外观) 例如:

   <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/splash_icon"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_marginTop="8dp"
        android:background="@color/buttonColor"
        app:layout_constraintBottom_toTopOf="@+id/guideline3"
        app:layout_constraintHorizontal_bias="0.488"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline3" />

    <TextView
        android:id="@+id/splash_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="28dp"
        android:layout_marginBottom="8dp"
        android:background="@color/buttonColor"
        android:text="GO Tools"
        android:textColor="@android:color/white"
        android:textSize="48sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/splash_progress"
        app:layout_constraintEnd_toEndOf="@+id/splash_icon"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="@+id/splash_icon"
        app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

    <ProgressBar
        android:id="@+id/splash_progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="136dp"
        android:layout_marginBottom="8dp"
        android:background="@color/buttonColor"
        app:layout_constraintBottom_toTopOf="@+id/splash_status"
        app:layout_constraintEnd_toEndOf="@+id/splash_icon"
        app:layout_constraintHorizontal_bias="0.506"
        app:layout_constraintStart_toStartOf="@+id/splash_icon"
        app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

    <TextView
        android:id="@+id/splash_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="204dp"
        android:layout_marginBottom="8dp"
        android:background="@color/buttonColor"
        android:text="STATUS"
        android:textAlignment="center"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/splash_icon"
        app:layout_constraintHorizontal_bias="0.508"
        app:layout_constraintStart_toStartOf="@+id/splash_icon"
        app:layout_constraintTop_toBottomOf="@+id/splash_icon" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.3"/>
</androidx.constraintlayout.widget.ConstraintLayout>

编辑:这可能适用于您的手机但我只是注意到您使用固定大小的视图 - 尽量避免这种情况,因为不同的手机有不同的手机大小

另一答案

您的布局过于依赖于屏幕的大小,通过将视图相互约束并依赖各种边距和垂直偏差使其在设计器中工作。因此,当您移动到另一个屏幕大小时,布局不会按您想要的方式工作。

请查看ConstraintLayout chains,了解如何对小部件进行分组,使其在所有屏幕尺寸中居中。我认为CHAIN_PACKED链是你需要的。

以上是关于元素将无法在Constraintlayout Android Studio中正确居中的主要内容,如果未能解决你的问题,请参考以下文章

自定义ConstraintLayout类似乎无法横向排列 - Android - Kotlin

Android开发 - 掌握ConstraintLayout障碍线(Barrier)

带有setAdjustViewBounds的Android ImageView在ConstraintLayout中具有无法解释的行为

关于Jetpack Compose 中 ConstraintLayout布局探索

如何使 ConstraintLayout 中的元素居中

ConstraintLayout 中的 Gone 元素会留下幽灵空间