Причина, по которой это происходит, в том, что ваш TextView имеет высоту MATCH_PARENT
.
<TextView
android:id="@+id/tv_noGroups"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="18sp"
android:visibility="gone" />
В этом коде вы говорите TextView
растянуть от вершины LinearLayout
до нижней части LinearLayout
.
LinearLayout
- это макет, который добавляет виды один за другим, если места достаточно.Но если вы скажете, чтобы представление растягивалось полностью, тогда больше не будет места, чтобы показать другие виды.
Так что для вашего FloatingActionButton
он просто отталкивается от экрана.
Он показывает себя при отображении списка, потому что в вашем Java-коде вы создали полностью растянутый tv_noGroups TextView GONE
.Этот GONE скрывает TextView и позволяет FloatingActionButton
возвращаться.
Если вы хотите исправить это с вашим текущим XML-файлом, есть два решения.
Добавьте вес в tv_noGroups TextView.android:layout_weight="1"
.Вы сделали то же самое для RecyclerView, поэтому он может позволить FloatingActionButton появляться даже тогда, когда RecyclerView растягивает весь экран.
Измените высоту на "wrap_content" в tv_noGroups TextView.Затем замените android:gravity="center"
на android:layout_gravity="center"
.
Тем не менее, это только объяснение, чтобы устранить проблему с макетом.
Я хочу добавить еще несколько слов, сказав, что есть больше макетов.LinearLayout
- это не тот макет, который подходит для того, что вы хотите сделать.
Как правило, если вы хотите использовать FloatingActionButton
, лучше использовать ConstraintLayout
или RelativeLayout
по двум причинам:
- Больше свободы в том месте, где вы размещаетеваши представления
- могут перекрывать друг друга, поэтому ваш
FloatingActionButton
может зависать над другими компонентами, такими как RecyclerView
.
LinearLayout
действительно слишком ограничивает его использование, из-за чего вы используете Layouts внутри Layouts, что на самом деле плохо.
Вот документация, опубликованная Google о том, почему вы должны избегать использования вложенных макетов и как вложенные макеты могут снизить производительность вашего приложения: https://developer.android.com/training/improving-layouts/optimizing-layout