Vista flutuante do Android (sobre outras vistas)
-
20-09-2019 - |
Pergunta
Estou brincando com isso há alguns dias, espero que alguém aqui possa me dar uma mão.
Eu tenho um layout simples de duas colunas, o lado esquerdo é uma barra de navegação com botões, o lado direito é um painel de conteúdo. Quando o usuário toca um dos botões (digamos, o terceiro para baixo), eu gostaria de ter uma vista flutuante alinhada à direita deste botão, mas flutuando em cima do painel de conteúdo. Aqui está uma imagem para ilustrar o que quero dizer:
Tudo o que tentei empurra o menu flutuante dentro da barra de navegação ou dentro do painel de conteúdo, o que não é o que eu quero. Alguma ideia? Aqui está basicamente o que tenho até agora:
<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>
Solução
Um Framelayout permite que você tenha uma visualização sobrepondo outra visualização. Não tenho certeza se faz sentido tê -los com apenas uma visão da criança, como você tem em seu exemplo. Tente ter um Framelayout no nível mais alto, com sua visão "estática" como o primeiro elemento filho e o menu flutuante como o segundo filho.
o Documentos do desenvolvedor Tenha uma boa visão geral dos tipos de layout, pode ajudá -lo a começar.
Outras dicas
RelativeLayout
é o que você quer.
FrameLayout
deve ter apenas um filho e, portanto, geralmente é usado apenas para um espaço reservado onde outros layouts vêm mais tarde (como o quadro principal da atividade).
AbsoluteLayout
é preterido e não deve ser usado.
RelativeLayout
Permite que as vistas se sobreponham e permite fazer, praticamente tudo o que você quiser.