#java #android #coordinator-layout
#java #Android #координатор-макет
Вопрос:
У меня есть ConstraintLayout, обертывающий мой раздел FABs в правом нижнем углу приложения. Я использую макет, а не только кнопки, потому что у меня больше просмотров по всем объектам (в приведенном ниже примере они опущены, реальный макет более сложный). Макет имеет CoordinatorLayout в качестве основного родительского элемента. У меня есть две базы данных, одна рядом с другой, когда я нажимаю на первую, вторая анимируется и перемещается вверх с помощью ViewPropertyAnimations, затем я нажимаю на вторую, и должны появиться другие представления. ПРОБЛЕМА В ТОМ, что переведенный файл не доступен для просмотра. Я могу щелкнуть по нему до начала анимации, но не после перевода.
Что я нашел до сих пор:
- Если я оставлю только кнопки 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