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.

  • Hacer vista de encabezado (no encabezado de sección) de ListView Stick en la parte superior
  • Cómo crear android listview como android google cromo pestaña
  • Android - PullToRefresh ListView siempre vacío
  • Cómo controlar páginas de páginas de vista desde otra página
  • Android: ¿Para establecer un elemento como seleccionado cuando se abre ListView?
  • Android ListView - se desplaza de nuevo al principio en la actualización
  • Android: ¿es posible tener un ListView dentro de un ListView?
  • Obtener datos de JSON en la vista de lista
  • Cómo hacer las imágenes más grandes (en altura) en la lista perezosa
  • Cómo configurar la posición de desplazamiento de ListView a la parte inferior de android?
  • Prohibir toques de interceptación de Listview mientras utiliza su Child MapView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.