Плавающий вид Android (поверх других видов)
-
20-09-2019 - |
Вопрос
Я возился с этим уже несколько дней, надеюсь, кто-нибудь здесь сможет мне помочь.
У меня простой макет из двух столбцов, левая сторона - панель навигации с кнопками, правая сторона - панель содержимого.Когда пользователь нажимает одну из кнопок (скажем, третью вниз), я бы хотел, чтобы плавающий вид был выровнен справа от этой кнопки, но плавал в верхней части панели содержимого.Вот картинка, иллюстрирующая, что я имею в виду:
Все, что я пробовал, помещает плавающее меню внутри панели навигации или внутри панели содержимого, а это не то, что я хочу.Есть какие-нибудь идеи?Вот в основном то, что у меня есть на данный момент:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_alignParentLeft="true"
android:id="@+id/navigation_bar"
>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.14"
>
<ImageButton
android:id="@+id/button1_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon"
android:layout_gravity="center"
/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.14"
>
<ImageButton
android:id="@+id/button2_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon"
android:layout_gravity="center"
/>
</FrameLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.14"
android:layout_toRightOf="@id/navigation_bar"
>
</FrameLayout>
</RelativeLayout>
Решение
FrameLayout позволяет вам создать представление, перекрывающее другое представление.Я не уверен, что имеет смысл иметь их только с одним дочерним представлением, как у вас в вашем примере.Попробуйте создать FrameLayout на самом высоком уровне, с вашим "статическим" представлением в качестве первого дочернего элемента и плавающим меню в качестве второго дочернего.
Тот Самый документы разработчика получите хороший обзор типов макетов, это может помочь вам начать работу.
Другие советы
RelativeLayout
это то, что вы хотите.
FrameLayout
должен иметь только один дочерний элемент и поэтому обычно используется только в качестве заполнителя там, где другие макеты появляются позже (например, в основном кадре действия).
AbsoluteLayout
устарел и не должен использоваться.
RelativeLayout
позволяет представлениям перекрываться и позволяет делать практически все, что захотите.