Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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".

  • FrameLayout no coincide con altura de NestedScrollView
  • Colocar la vista dentro de FrameLayout en Android
  • ¿Cómo puedo alinear un elemento a la derecha en FrameLayout?
  • ¿Diferencia entre el marco y el diseño relativo?
  • Android: Relativelayout en Framelayout no aparece (Pantalla de vista previa de cámara personalizada)
  • Android Fragment no respeta a match_parent como altura
  • Android YouTubePlayer con superposición no autorizada encima del reproductor
  • Advertencia: Este <FrameLayout> se puede reemplazar con una etiqueta <merge>
  • 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> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.