El diseño del elemento ListView difiere entre targetSdkVersion = "17" y targetSdkVersion = "18"

Acabo de actualizar el SDK de Android a la versión 18 y modificó el proyecto que estoy trabajando para usarlo en lugar de la versión 17. Resulta que mi ListView se ve muy diferente ahora. Sin embargo, sólo cambiando targetSdkVersion de 18 a 17 dentro del archivo de manifiesto lo hace correcto de nuevo.

Me las arreglé para reproducir el problema mediante la creación de un nuevo proyecto de Android en Eclipse y el cambio de la actividad principal a la implementación ListActivity más básica posible:

public class MainActivity extends ListActivity { private static final String[] listItems = new String[] { "list item 1", "list item 2"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.text, listItems)); } } 

El archivo list_item.xml contiene lo siguiente:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="100dip" android:background="#ff0000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignBottom="@id/text" android:layout_alignTop="@id/text" android:background="#88ffffff" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#8c0000ff" android:text="@string/button1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="20dip" android:background="#8c00ff00" android:text="@string/button2" /> </LinearLayout> </RelativeLayout> 

Tener el LinearLayout sobre el TextView es intencional. Quiero usar el LinearLayout como una superposición y mostrarlo / ocultarlo cuando sea necesario.

Ahora, cuando pongo la targetSdkVersion dentro del archivo AndroidManifest.xml a 17, todo funciona como se esperaba, lo que significa que los botones coinciden con la altura de LinearLayout. Sin embargo, cuando cambio la versión a 18, se comportan como si usaron "wrap_content". ¿Por qué estoy obteniendo este comportamiento extraño y cómo puedo solucionarlo para que funcione como en SDK 17?

One Solution collect form web for “El diseño del elemento ListView difiere entre targetSdkVersion = "17" y targetSdkVersion = "18"”

Esto me parece muy extraño. Su LinearLayout no debe necesitar las propiedades layout_alignBottom / layout_alignTop establecidas en la medida de lo que puedo ver, pero eliminar estas líneas y el propio LinearLayout muestra incorrectamente. La única manera de obtener lo que creo es el resultado que quieres en mis pruebas fue eliminar alignTop / alignBottom (ya que parecen innecesarias) de tu LinearLayout y añadir la línea:

  android:minHeight="100dip" 

Espero que esto ayude.

  • Crear listview con separadores alfabéticos android - cómo?
  • Cambiar el color de fondo del primer elemento en ListView
  • Android - ¿Cómo implementar un NavigationDrawer parcialmente visible en todo momento?
  • Cómo hacer un fragmento desplazable con un ListView
  • El adaptador de vista de lista no funciona, getView no se llama.
  • Cómo iniciar la visualización de una vista de lista desde la posición de un elemento específico
  • Obtener elemento de ListView sólo con OnTouchListener
  • Android ListView elemento seleccionado permanecer destacado
  • El evento Onclick se realiza incluso con un clic largo
  • Mensajes de error de Android en conflicto: el hijo especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Agregando Viewpager como un encabezado a un listView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.