Просмотр не кликабельный после перевода в CoordinatorLayot

#java #android #coordinator-layout

#java #Android #координатор-макет

Вопрос:

У меня есть ConstraintLayout, обертывающий мой раздел FABs в правом нижнем углу приложения. Я использую макет, а не только кнопки, потому что у меня больше просмотров по всем объектам (в приведенном ниже примере они опущены, реальный макет более сложный). Макет имеет CoordinatorLayout в качестве основного родительского элемента. У меня есть две базы данных, одна рядом с другой, когда я нажимаю на первую, вторая анимируется и перемещается вверх с помощью ViewPropertyAnimations, затем я нажимаю на вторую, и должны появиться другие представления. ПРОБЛЕМА В ТОМ, что переведенный файл не доступен для просмотра. Я могу щелкнуть по нему до начала анимации, но не после перевода.

не кликабельный fab

Что я нашел до сих пор:

  • Если я оставлю только кнопки CoordinatorLayout и FAbs -> OK, щелчок работает после перевода
  • Если я оставлю только кнопки ConstraintLayout и FAbs -> OK, щелчок работает после перевода
  • Если я оставлю кнопки CoordinatorLayout, ConstraintLayout и FAbs —> KO, щелчок не будет работать после перевода
  • Если я заменю ConstraintLayout на LinearLayout —> KO, щелчок не будет работать после перевода

Можете ли вы помочь мне исправить это?

Версии зависимостей

 implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
 

Макет фрагмента (это упрощенная версия, реальная имеет много просмотров)

 <?xml version="1.0" encoding="utf-8"?>

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@ id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:clipChildren="false" >

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@ id/cl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_marginEnd="24dp"
        android:layout_marginBottom="24dp"
        android:clipChildren="false"
        android:clipToPadding="false"
        app:layout_dodgeInsetEdges="bottom" >

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@ id/fab2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:src="@android:drawable/ic_delete"
            android:elevation="3dp"
            android:layout_gravity="end|bottom"
            app:fabSize="mini"
            app:layout_constraintBottom_toBottomOf="@ id/fab1"
            app:layout_constraintEnd_toStartOf="@ id/fab1"
            app:layout_constraintTop_toTopOf="@ id/fab1" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@ id/fab1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:elevation="6dp"
            android:layout_gravity="end|bottom"
            android:src="@android:drawable/btn_star_big_on"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:fabSize="normal"
            android:focusable="true" />
        
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
 

Код анимации

 FloatingActionButton fab1 = requireView().findViewById(R.id.fab1);
FloatingActionButton fab2 = requireView().findViewById(R.id.fab2);

fab1.setOnClickListener(v -> fab2.animate().translationY(-200));
fab1.setOnLongClickListener(v -> {
    fab2.animate().translationY(0);
    return true;
});

fab2.setOnClickListener(v -> Toast.makeText(requireContext(),"click",Toast.LENGTH_SHORT).show());
 

Комментарии:

1. Вы когда-нибудь решали эту проблему? У меня такая же проблема.

2. Я использовал MotionLayout с переходом, который добавляет поле в нижней части второй страницы. Не уверен, что это решение idea. Мне сообщали о некоторой медлительности на старых устройствах.

Ответ №1:

Проблема, похоже, решена с помощью constraintlayout: 2.1.0