TransWikia.com

В чём ошибка в разметке xml?

Stack Overflow на русском Asked on November 27, 2021

Всем привет, пытаюсь сделать следующее: есть navigation drawer сбоку, в нём есть FragmentContainerView. В этот контейнер помещается фрагмент, в котором также есть FragmentContainerView. Когда я во внутренний контейнер помещаю фрагмент, то на hdpi разрешении он залазит на другой элемент. Не знаю что делать в данной ситуации, везде старался использовать wrap_content, match_parent и 0dp.
введите сюда описание изображения

на картинке кнопка "авторизация" залазит на картинку лого. Соотвественно, увеличу текст/межстрочный интервал – всё будет выглядеть ещё хуже (
Разметка фрагмента менюшки:

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

    <ImageView
        android:id="@+id/iv_menu_drag_handle"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_drag_handle_vertical" />

    <TextView
        android:id="@+id/textView"
        style="@style/DriverDataBoldBottomSheetText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:drawableBottom="@drawable/ic_underlined_allrequests"
        android:text="@string/label_all_requests"
        android:textAllCaps="true"
        android:textSize="25sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/iv_menu_drag_handle"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/requests_menu_content"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/iv_menu_drag_handle"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

</androidx.constraintlayout.widget.ConstraintLayout>

Разметка фрагмента, который помещается в requests_menu_content в менюшке

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

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:adjustViewBounds="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/picture_auth" />

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/menu_auth_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/imageView4"
        app:layout_constraintTop_toBottomOf="@+id/imageView2"
        app:layout_constraintVertical_bias="0.0" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:adjustViewBounds="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2"
        app:layout_constraintVertical_bias="1.0"
        app:srcCompat="@drawable/logo_small_colored" />

</androidx.constraintlayout.widget.ConstraintLayout>

И, наконец, разметка фрагмента, который помещается в menu_auth_content в этом фрагменте в менюшке. (Как раз таки этот фрагмент и вылазит на иконку лого)

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

    <Button
        android:id="@+id/btn_start_auth"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="10dp"
        android:text="@string/btn_auth"
        android:textAllCaps="false"
        android:theme="@style/RedButtonTheme"
        app:layout_constraintEnd_toEndOf="@+id/tv_auth_text_label4"
        app:layout_constraintStart_toStartOf="@+id/tv_auth_text_label4"
        app:layout_constraintTop_toBottomOf="@+id/tv_auth_text_label4" />

    <TextView
        android:id="@+id/tv_auth_label_title4"
        style="@style/DriverDataBoldBottomSheetText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/commit_auth"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_auth_text_label4"
        style="@style/DriverDataBoldBottomSheetText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:lineSpacingExtra="10sp"
        android:text="@string/deny_requests_auth_reason"
        android:textSize="13sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_auth_label_title4" />
</androidx.constraintlayout.widget.ConstraintLayout>

Очень не хотелось бы прибегать к созданию вёрсток под другие экраны, т.к. по-сути это костыльный в какой-то степени подход, на мой взгляд, потому что если обраружится ещё для какого-то устройства, с другим разрешением – для него ещё одна вёрстка и так далее, число созданных макетов улетит в космос. Хотелось бы понять, как в данной ситуации с помощью 1-го макета можно было бы получить адаптивный интерфейс под все устройства. Очень надеюсь на Вашу помощь.

One Answer

Ну есть два варианта:

  • это сделать размер элементов адаптивными, т.е. чтоб их размер зависел от размера экрана. Т.е. сделать чтоб все констрейнты были привязаны друг к другу. Но тут правда будет проблема с шрифтами.

  • обернуть макет Navigation в ScrollView. Тогда контент просто будет скроллиться

Answered by Sergei Buvaka on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP