Размер представления ConstraintLayout реагирует - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь сделать макет, используя ConstraintLayout в качестве parent, который имеет три buttons, как на рисунке ниже.

enter image description here

Файл макета xml выглядит следующим образом:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<Button
    android:id="@+id/splash_facebook_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_margin="15dp"/>

<Button
    android:id="@+id/splash_sign_in_btn"
    android:layout_width="180dp"
    android:layout_height="45dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="12dp"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/splash_facebook_btn" />

<Button
    android:id="@+id/splash_sign_up_btn"
    android:layout_width="180dp"
    android:layout_height="45dp"
    android:layout_marginEnd="15dp"
    app:layout_constraintBottom_toBottomOf="@id/splash_sign_in_btn"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.995"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintStart_toEndOf="@id/splash_sign_in_btn"
    app:layout_constraintTop_toTopOf="@id/splash_sign_in_btn"
    app:layout_constraintVertical_bias="0.0" />

Я хочу сделать это без установки фиксированных значений для двух кнопок внизу.

Я знаю, что могу добиться этого, изменив на LinearLayout и используя layout_weight, но я хочу сделать это, имея ConstraintLayout в качестве родителя.

Есть ли способ сделать это? * * 1023

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Используйте Guideline как:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<Button
    android:id="@+id/splash_facebook_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_margin="15dp"/>

<Button
    android:id="@+id/splash_sign_in_btn"
    android:layout_width="0dp"
    android:layout_height="45dp"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="15dp"
    android:layout_marginTop="12dp"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toStartOf="@id/guideline_vertical"
    app:layout_constraintTop_toBottomOf="@id/splash_facebook_btn" />

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/guideline_vertical"
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.5"/>

<Button
    android:id="@+id/splash_sign_up_btn"
    android:layout_height="0dp"
    android:layout_width="0dp"
    android:layout_marginEnd="15dp"
    android:layout_marginStart="15dp"
    app:layout_constraintBottom_toBottomOf="@id/splash_sign_in_btn"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/guideline_vertical"
    app:layout_constraintTop_toTopOf="@id/splash_sign_in_btn"
    app:layout_constraintVertical_bias="0.0"/>

</androidx.constraintlayout.widget.ConstraintLayout>
1 голос
/ 28 февраля 2020

Удалите фиксированные значения, добавьте ограничения для этих кнопок: влево и вправо и установите их ширину 0dp. вот изображение вот результат:

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

<Button
    android:id="@+id/splash_facebook_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:text="continua cu cancer frate" />

<Button
    android:id="@+id/splash_sign_in_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="12dp"
    android:layout_marginEnd="16dp"
    app:layout_constraintEnd_toStartOf="@id/splash_sign_up_btn"
    app:layout_constraintStart_toStartOf="@id/splash_facebook_btn"
    app:layout_constraintTop_toBottomOf="@id/splash_facebook_btn"
    tools:text="intra aici frate" />

<Button
    android:id="@+id/splash_sign_up_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="12dp"
    app:layout_constraintEnd_toEndOf="@id/splash_facebook_btn"
    app:layout_constraintStart_toEndOf="@id/splash_sign_in_btn"
    app:layout_constraintTop_toBottomOf="@id/splash_facebook_btn"
    tools:text="Creeaza cont frate" />

PS: я добавил инструменты: текст, чтобы в предварительном просмотре Android Studio был текст , PSS: Удачи, фрайт

1 голос
/ 28 февраля 2020

Для левой кнопки установите android:layout_marginEnd="8dp" для правой android:layout_marginStart="8dp", а затем программно установите их ширину:

public int getScreenWidth() {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);    
    return size.x/2;
}

Таким образом, вы получите screen width/2, а затем вы можете установить ширину кнопок с помощью этого значение.

Если вы предпочитаете только XML, попробуйте следующее:

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


    <Button
        android:id="@+id/splash_facebook_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_margin="15dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:orientation="horizontal"
        android:weightSum="2"
        android:layout_marginTop="8dp"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintTop_toBottomOf="@+id/splash_facebook_btn"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        >

        <Button
            android:id="@+id/splash_sign_in_btn"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginEnd="8dp"
            android:layout_weight="1" />

        <Button
            android:id="@+id/splash_sign_up_btn"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginStart="8dp"
            android:layout_weight="1" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>
...