El botón siempre aparece en la parte superior de FrameLayout

Tengo FrameLayout como este:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="changeColor" android:text="new button"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="some text"/> </FrameLayout> 

El problema es que el botón se muestra en la parte superior, mientras que la descripción de la clase FrameLayout nos dice esto: "Las vistas secundarias se dibujan en una pila, con el niño añadido más recientemente en la parte superior".

4 Solutions collect form web for “El botón siempre aparece en la parte superior de FrameLayout”

Esta respuesta

Los botones en Lollipop y superiores tienen una elevación por defecto a ellos que hace que siempre dibujar en la parte superior. Puede cambiar esto reemplazando el predeterminado StateListAnimator.

Intente poner esto en su botón XML:

android:stateListAnimator="@null"

El FrameLayout ahora debe cubrir el botón.

En Android 5.0 (API 21) y superior, debe agregar android: elevación en la vista.

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="changeColor" android:text="new button"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="some text" android:elevation="3dp"/> 

FrameLayout debe utilizarse para mantener una single child view un single child view , ya que puede ser difícil organizar las vistas de los niños de una manera que sea escalable a diferentes tamaños de pantalla sin que los niños se superpongan entre sí .

Debe utilizar LinearLayout o RelativeLayout en FrameLayout . De esta manera

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="changeColor" android:text="new button"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="some text"/> </RelativeLayout> </FrameLayout> 

Como señala la documentación oficial androide:

FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Generalmente, FrameLayout debe utilizarse para mantener una vista de un solo hijo, ya que puede ser difícil organizar las vistas de los niños de una manera que sea escalable a diferentes tamaños de pantalla sin que los niños se superpongan entre sí. Sin embargo, puede agregar varios hijos a un FrameLayout y controlar su posición dentro del FrameLayout asignando gravedad a cada niño, utilizando el atributo android: layout_gravity.

Es mejor si pones tu Button y Textview en un RelativeLayout dentro de FrameLayout como:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="some text"/> <Button android:id="@+id/button1" android:layout_below="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="changeColor" android:text="new button"/> <RelativeLayout> </FrameLayout> 
  • Superponer imagen sobre otro android
  • Android - La altura de la estructura del marco no coincide con el diseño del coordinador
  • Cómo establecer el atributo de primer plano en otra vista no FrameLayout
  • Después de que el fragmento de cambio de configuración de backstack ahora está compartiendo el FrameLayout?
  • Cómo obtener una foto de video jugando dentro de FrameLayout en android?
  • ¿Qué es MergeRootFrame en FrameLayout?
  • FrameLayout a RelativeLayout ClassCastException incluso si no hay FrameLayout usado
  • ¿Cómo crear una superposición que bloquea los eventos de toque a la interfaz de usuario debajo de él?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.