Android Studio: Button siempre aparece en la parte delantera

Tengo un RelativeLayout al que agrego las vistas.

He añadido un botón a él, y el botón siempre aparece delante de todas las otras vistas que se agregan a ella, independientemente del orden en que se agregaron las cosas. ¿Cómo?

Estoy codificando puramente en Java, no XML.

Aquí está un ejemplo simple, el botón aparecerá aquí delante del texto, aunque el texto fue agregado por último:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout layout = new RelativeLayout(this); Button button = new Button(this); TextView text = new TextView(this); button.setText("Button"); text.setText("Text"); layout.addView(button); layout.addView(text); setContentView(layout); } 

Comenzando con Lollipop, un StateListAnimator que controlaba la elevación se añadió al estilo predeterminado Button. En mi experiencia, esto obliga a los botones a aparecer por encima de todo lo demás independientemente de la colocación en XML (o adición programática en su caso). Eso podría ser lo que estás experimentando.

Para resolver esto, puede agregar un StateListAnimator personalizado si lo necesita o simplemente establecerlo en null si no lo hace.

XML:

 android:stateListAnimator="@null" 

Java:

 Button button = new Button(this); button.setText("Button"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { button.setStateListAnimator(null); } 

Más detalles: Android 5.0 android: elevación Funciona para la vista, pero no el botón?

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

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout layout = new RelativeLayout(this); Button button = new Button(this); TextView text = new TextView(this); button.setText("Button"); text.setText("Text"); button.setElevation(3.0f); // add this line, you could try with values > 3.0f layout.addView(button); layout.addView(text); setContentView(layout); } 

Desde los desarrolladores de android:

 By default, all child views are drawn at the top-left of the layout, so you must define the position of each view using the various layout properties available from RelativeLayout.LayoutParams. 

http://developer.android.com/guide/topics/ui/layout/relative.html

Pruebe el siguiente fragmento:

 RelativeLayout layout = new RelativeLayout(this); Button button = new Button(this); TextView text = new TextView(this); button.setId(View.generateViewId()); text.setId(View.generateViewId()); button.setText("Button"); text.setText("Text"); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.BELOW, text.getId()); button.setLayoutParams(params); layout.addView(button); layout.addView(text); 

El botón aparece para flotar a la vanguardia de la RelativeLayout está en tan …

Prueba esto:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("Button"); RelativeLayout groupContainingButton = new RelativeLayout(this); groupContainingButton.addView(button); TextView text = new TextView(this); text.setText("Text"); RelativeLayout activityLayout = new RelativeLayout(this); activityLayout.addView(groupContainingButton); activityLayout.addView(text); setContentView(activityLayout); } 
  • Los complementos no funcionan en Eclipse en Windows 7 64 bits
  • Grupo de usuarios en firebase
  • ¿El zócalo del cliente androide, cómo leer datos?
  • En RxJava, cómo reintentar / reanudar en caso de error, en lugar de completar el observable
  • ¿Cómo hacer que las aplicaciones de Android con reproductible se basa?
  • Devolución de una matriz de AsyncTask volver a Actividad principal
  • Android FinalizerReference con 7mb de RAM
  • Cómo encontrar texto visible en la vista de texto
  • Cargando una imagen usando OpenCV en Android
  • Reduciendo el tamaño de la aplicación para Android (apk)
  • Java.lang.RuntimeException: Fallo en la entrega del resultado ResultInfo {who = null, request = 64206, resultado = -1, data = Intent
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.