Кнопка перекрывает TabLayout в ConstraintLayout

В Constraintlayout я использую направляющую для отображения tablayout и представления, tablayout покрывает 10%, а view покрывает остальную часть экрана. При щелчке по вкладке я хочу показать некоторые кнопки, идущие снизу до 55% экрана, для чего я использую другой ориентир (для виджетов) на 55%.

Вот xml:

<?xml version = "1.0" encoding = "utf-8"?>
<layout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto">

    <android.support.constraint.ConstraintLayout
        android:id = "@+id/cl"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent">

        <View
            android:id = "@+id/view"
            android:layout_width = "0dp"
            android:layout_height = "0dp"
            android:background = "#D3D3D3"
            app:layout_constraintBottom_toTopOf = "@+id/glTabLayout"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toTopOf = "parent" />

        <Button
            android:id = "@+id/button"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:background = "@null"
            android:text = "Button"
            android:drawableTop = "@mipmap/ic_launcher"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintRight_toLeftOf = "@+id/imageView"
            app:layout_constraintTop_toBottomOf = "@+id/glWidgets" />

        <ImageView
            android:id = "@+id/imageView"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:background = "@mipmap/ic_launcher"
            app:layout_constraintLeft_toRightOf = "@+id/button"
            app:layout_constraintRight_toLeftOf = "@+id/textView"
            app:layout_constraintTop_toBottomOf = "@+id/glWidgets" />

        <TextView
            android:id = "@+id/textView"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text = "@string/test"
            android:textColor = "#ff0000"
            app:layout_constraintLeft_toRightOf = "@+id/imageView"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintTop_toBottomOf = "@+id/glWidgets" />

        <android.support.constraint.Guideline
            android:id = "@+id/glTabLayout"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal"
            app:layout_constraintGuide_percent = "0.90" />

        <android.support.constraint.Guideline
            android:id = "@+id/glWidgets"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal"
            app:layout_constraintGuide_percent = "0.55" />

        <android.support.design.widget.TabLayout
            android:id = "@+id/tabLayout"
            android:layout_width = "0dp"
            android:layout_height = "0dp"
            android:background = "@android:color/white"
            app:layout_constraintBottom_toBottomOf = "parent"
            app:layout_constraintEnd_toEndOf = "parent"
            app:layout_constraintStart_toStartOf = "parent"
            app:layout_constraintTop_toBottomOf = "@+id/glTabLayout"
            app:tabGravity = "fill"
            app:tabMode = "fixed"
            app:tabTextAppearance = "@android:style/TextAppearance.Widget.TabWidget" />

    </android.support.constraint.ConstraintLayout>

</layout>

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

Код для анимации / обновления руководства:

    ConstraintLayout constraintLayout = binding.cl;
    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(constraintLayout);
    constraintSet.setGuidelinePercent(binding.glWidgets.getId(), percent);
    TransitionManager.beginDelayedTransition(constraintLayout);
    constraintSet.applyTo(constraintLayout);

Теперь изображение, текст или другие обычные представления скрываются под вкладкой, но кнопка перекрывает вкладку. Я хочу, чтобы кнопка находилась под вкладкой при анимации. Скриншоты прилагаются для лучшего понимания:

Кнопка перекрывает TabLayout в ConstraintLayoutКнопка перекрывает TabLayout в ConstraintLayout

Вы проверили настройки высоты кнопки? Также Z-перевод подлежит проверке.

Nikita Khlebushkin 09.03.2018 21:11

Еще одна вещь: попробуйте добавить android:stateListAnimator = "@null" к вашей кнопке, его значение по умолчанию заставляет Button рисоваться после "статических" элементов.

Nikita Khlebushkin 09.03.2018 21:14

@NikitaKhlebushkin Добавление android: stateListAnimator = "@ null" к кнопке сработало. Благодарность

Nouman Bhatti 10.03.2018 13:41
0
3
1 435
1

Ответы 1

Вы пробовали ввести тип кнопки в textView всякий раз, когда вы находитесь в этом режиме, где вы хотите отображать вкладки поверх представлений?

  • Если вам не нужно много чего от класса Button, это может быть альтернативой:

Использование макета (относительного или линейного), содержащего текстовое представление и изображение вместо кнопки.

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

Nouman Bhatti 09.03.2018 20:00

Другие вопросы по теме