Элементы не будут правильно центрироваться в Constraintlayout Android Studio - PullRequest
1 голос
/ 07 марта 2019

У меня есть заставка, подобная этой:

, но если я открою свое приложение, оно будет выглядеть так:

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, но еслиЯ запускаю мое приложение до сих пор не работает.Кто-то знает, как это сделать?Огромное спасибо!

РЕДАКТИРОВАТЬ: изображение не будет загружаться, но оно установлено правильно.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Похоже, что ваш макет в порядке, но если вы хотите, чтобы ваше изображение было немного больше в верхней части экрана, вам нужно изменить его, теперь вы говорите, что ваше изображение центрировано по центру экрана, так что все другие ваши виды будут размещены ниже вашего изображения. Хорошим решением было бы добавить направляющую и ограничить ваше изображение в направляющей, а не в верхней части экрана (таким образом ваше изображение будет размещено немного выше, и это изменит ваш внешний вид)

Для пример:

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

Редактировать: это может работать на вашем телефоне, но я только что заметил, что вы используете фиксированный размер для ваших просмотров - постарайтесь избежать этого, потому что разные телефоны имеют разные размеры телефона

0 голосов
/ 07 марта 2019

Ваш макет слишком сильно зависит от размера экрана, ограничивая ваши взгляды друг с другом и полагаясь на различные поля и вертикальные смещения, чтобы заставить его работать в конструкторе. В результате при переходе к экрану другого размера макет не работает так, как вы предполагали.

Взгляните на ConstraintLayout цепочки , чтобы найти способ группировки ваших виджетов так, чтобы они центрировались на экранах всех размеров. Я думаю, что CHAIN_PACKED цепь - это то, что вам нужно.

...