Проблемы с макетом XML и программными кнопками - PullRequest
0 голосов
/ 01 июля 2018

Так что в основном у меня есть действие с 4 кнопками, которые в Android Studio выглядят не так, как программные кнопки в нижней части экрана, но когда я запускаю их на своем телефоне, это не так. Я не уверен, есть ли у меня правильные ограничения на нижнюю кнопку или нет?

<?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"
    tools:context=".NewMainMenu"
    tools:layout_editor_absoluteY="25dp">

    <Button
        android:id="@+id/button"
        android:layout_width="411dp"
        android:layout_height="100dp"
        android:layout_marginTop="258dp"
        android:background="@android:color/holo_blue_light"
        android:text="Button"
        app:layout_constraintBottom_toTopOf="@+id/button4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button4"
        android:layout_width="411dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_red_light"
        android:text="Button"
        app:layout_constraintBottom_toTopOf="@+id/button3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="411dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_green_light"
        android:text="Button"
        app:layout_constraintBottom_toTopOf="@+id/button2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button4" />

    <Button
        android:id="@+id/button2"
        android:layout_width="411dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_orange_light"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button3" />
</android.support.constraint.ConstraintLayout>

What the app looks like in Android Studio

This is what the app looks like on my phone

Ответы [ 4 ]

0 голосов
/ 01 июля 2018

enter image description here некоторые коды не верны пожалуйста, напишите ниже коды:

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

<Button
    android:id="@+id/button3"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_green_light"
    android:text="Button"
    app:layout_constraintBottom_toTopOf="@+id/button2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_light"
    android:text="Button"
    app:layout_constraintBottom_toBottomOf="parent" />

<Button
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_orange_dark"
    android:text="Button"
    app:layout_constraintBottom_toTopOf="@+id/button3"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent" />

0 голосов
/ 01 июля 2018

Проблема в том, что вы явно устанавливаете высоту кнопки и верхнее поле верхней кнопки на фиксированные значения. На вашем устройстве общая сумма всех высот и отступов превышает высоту устройства.

Простое исправление состоит в том, чтобы не ограничивал верхнюю часть самой верхней кнопки родительским элементом и удалял верхнее поле. Тогда он будет лежать над кнопкой под ним, но не будет давить сверху родителя.

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

Подробнее см. В документах ConstraintLayout .

Надеюсь, это поможет!

0 голосов
/ 01 июля 2018

Ваши ограничения неверны. Вы использовали ограничения app:layout_constraintTop_toBottomOf и app:layout_constraintBottom_toTopOf, что неправильно. Используйте только ограничение app:layout_constraintBottom_toTopOf, чтобы сложить один над другим. Используйте этот код:

<?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"
tools:context=".NewMainMenu"
tools:layout_editor_absoluteY="25dp">

<Button
    android:id="@+id/button"
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_light"
    android:text="Button"
    app:layout_constraintBottom_toTopOf="@+id/button4"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.494"
    app:layout_constraintStart_toStartOf="parent" />

<Button
    android:id="@+id/button4"
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_red_light"
    android:text="Button"
    app:layout_constraintBottom_toTopOf="@+id/button3"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<Button
    android:id="@+id/button3"
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_green_light"
    android:text="Button"
    app:layout_constraintBottom_toTopOf="@+id/button2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_orange_light"
    android:text="Button"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"


    />
</android.support.constraint.ConstraintLayout>
0 голосов
/ 01 июля 2018

если вы используете из ConstraintLayout, вы можете добавить этот атрибут:

app:layout_constraintBottom_toBottomOf="parent"

по этому коду ваше представление остается в нижней части макета.

и для других видов вы можете использовать из этого кода:

        app:layout_constraintBottom_toBottomOf="@+id/{bottom View}"
...