ConstraintLayout не отвечает - PullRequest
1 голос
/ 01 июля 2019

Я создал макет, используя ConstraintLayout для моего приложения для Android. Приложение будет доступно только на мобильном телефоне (без телевизора или планшета). Но, честно говоря, я не знаю, как сделать так, чтобы макет идеально подходил к размеру телефона.

Вот одно из моих занятий

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="@color/colorPrimary"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="75dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:fontFamily="@font/billabong"
        android:gravity="center"
        android:text="Applikáció"
        android:textColor="@color/white"
        android:textSize="65sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.054" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/inputLayoutEmail"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:textColorHint="@color/inputText"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.255">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/login_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/inputText"
            android:hint="E-mail cim"
            android:inputType="text"
            android:textColor="@color/colorAccent"
            android:textColorHint="@color/colorPrimaryLight"
            tools:layout_editor_absoluteX="16dp"
            tools:layout_editor_absoluteY="214dp" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/inputLayoutPassword"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:textColorHint="@color/inputText"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputLayoutEmail"
        app:layout_constraintVertical_bias="0.0">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/login_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/inputText"
            android:textColor="@color/colorAccent"
            android:hint="Jelszó"
            android:inputType="textPassword"
            android:textColorHint="@color/colorPrimaryLight" />

    </android.support.design.widget.TextInputLayout>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="21dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:buttonTint="@color/colorAccent"
        android:hint="Maradjak bejelentkezve"
        android:textColorHint="@color/inputText"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputLayoutPassword"
        app:layout_constraintVertical_bias="0.0" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="28dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:background="@drawable/button_style_1"
        android:onClick="onClickButtonMain"
        android:text="Bejelentkezés"
        android:textColor="@color/white"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/checkBox"
        app:layout_constraintVertical_bias="0.0" />

    <Button
        android:id="@+id/registration_button"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="18dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:background="@drawable/button_style_blue"
        android:onClick="onClickButtonMain"
        android:text="Regisztráció"
        android:textColor="@color/white"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/login_button"
        app:layout_constraintVertical_bias="0.0" />

    <Button
        android:id="@+id/information_button"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:background="@drawable/button_style_2"
        android:onClick="onClickButtonMain"
        android:text="Lépések"
        android:textColor="@color/colorAccent"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/registration_button"
        app:layout_constraintVertical_bias="0.612" />

</android.support.constraint.ConstraintLayout>

Этот макет отлично смотрится на Pixel, но, например, на Nexus S кнопки и поля, как будто их не волнует, как я их определил. Мне бы очень хотелось узнать, что я делаю не так. Я хотел бы иметь возможность создавать адаптивные макеты.

enter image description here

1 Ответ

2 голосов
/ 01 июля 2019

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

Разные телефоны имеют разный размер экрана , в вашем макете вы используете фиксированный размер наваш вид (например, фиксированный размер android:layout_width="300dp"), и в результате получается то, что может хорошо выглядеть на одном экране (экран предварительного просмотра в студии Android), но не будет хорошо смотреться на другом экране (ваш реальный телефон).


Для вашего случая я рекомендую использовать Цепи и Guildelines , это сделает ваш макет отзывчивым.

Вот пример макета, который вы хотитечтобы добиться использования ConstraintLayout :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">


<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:gravity="center"
    android:text="Applikáció"
    android:textSize="65sp"
    app:layout_constraintBottom_toTopOf="@+id/guideline6"
    app:layout_constraintTop_toTopOf="parent"
    tools:layout_editor_absoluteX="0dp" />

<android.support.design.widget.TextInputLayout
    android:id="@+id/inputLayoutEmail"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textColorHint="@color/inputText"
    app:layout_constraintBottom_toTopOf="@+id/inputLayoutPassword"
    app:layout_constraintEnd_toStartOf="@+id/guideline7"
    app:layout_constraintStart_toStartOf="@+id/guideline8"
    app:layout_constraintTop_toTopOf="@+id/guideline6">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/login_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/inputText"
        android:hint="E-mail cim"
        android:inputType="text"
        android:textColor="@color/colorAccent"
        android:textColorHint="@color/colorPrimaryLight" />

</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/inputLayoutPassword"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textColorHint="@color/inputText"
    app:layout_constraintBottom_toTopOf="@+id/checkBox"
    app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
    app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
    app:layout_constraintTop_toBottomOf="@+id/inputLayoutEmail">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/login_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/inputText"
        android:hint="Jelszó"
        android:inputType="textPassword"
        android:textColor="@color/colorAccent"
        android:textColorHint="@color/colorPrimaryLight" />

</android.support.design.widget.TextInputLayout>

<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:buttonTint="@color/colorAccent"
    android:hint="Maradjak bejelentkezve"
    android:textSize="14sp"
    app:layout_constraintBottom_toTopOf="@+id/login_button"
    app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
    app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
    app:layout_constraintTop_toBottomOf="@+id/inputLayoutPassword" />

<Button
    android:id="@+id/login_button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:onClick="onClickButtonMain"
    android:text="Bejelentkezés"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@+id/registration_button"
    app:layout_constraintEnd_toStartOf="@+id/guideline7"
    app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
    app:layout_constraintTop_toBottomOf="@+id/checkBox" />

<Button
    android:id="@+id/registration_button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:onClick="onClickButtonMain"
    android:text="Regisztráció"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@+id/information_button"
    app:layout_constraintEnd_toStartOf="@+id/guideline7"
    app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
    app:layout_constraintTop_toBottomOf="@+id/login_button" />

<Button
    android:id="@+id/information_button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:onClick="onClickButtonMain"
    android:text="Lépések"
    android:textColor="@color/colorAccent"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="@+id/inputLayoutEmail"
    app:layout_constraintStart_toStartOf="@+id/inputLayoutEmail"
    app:layout_constraintTop_toBottomOf="@+id/registration_button" />

<android.support.constraint.Guideline
    android:id="@+id/guideline6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_begin="20dp"
    app:layout_constraintGuide_percent="0.25" />

<android.support.constraint.Guideline
    android:id="@+id/guideline7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent=".9" />

<android.support.constraint.Guideline
    android:id="@+id/guideline8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent=".1" />

</android.support.constraint.ConstraintLayout>

Это будет выглядеть так (я добавляю картинку из редактора макетов, чтобы вы могли видеть рекомендации):

enter image description here

Теперь все, что осталось сделать, это стилизовать ваши виды, и у вас есть готовый макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...