El estilo de la casilla de verificación en la vista de lista es incorrecto
Tengo un problema con el estilo en mis casillas de verificación que aparecen en listas. El tema que mi aplicación utiliza es Holo, pero las casillas de verificación aparecen con el estilo antiguo. Las casillas de verificación que aparecen en otro lugar se ven bien. No estoy haciendo nada extravagante como crear mi propio estilo. Capturas de pantalla:
- No se puede implementar el deslizamiento + comportamiento de desplazamiento en el panel deslizante con ListView en Android
- Cómo mostrar la barra de progreso (círculo) en una actividad que tiene un listview antes de cargar el listview con datos
- Omitir el error en el filtrado que no actualiza ListView Android
- Cambiar Estado del conmutador sin animación
- Añadir fragmento al elemento de vista de lista
Se supone que las casillas de verificación se parecen a las de la imagen correcta. Esto está en v4.0.3. Las casillas de verificación se ven como deberían en otro dispositivo que probé con v4.4.2.
XML para la fila listview:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <CheckBox android:id="@+id/ListRow_Task_TaskComplete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="6sp" android:focusable="false" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="7dip" android:paddingBottom="7dip" android:layout_toRightOf="@+id/ListRow_Task_TaskComplete" android:layout_centerVertical="true" > <TextView android:id="@+id/ListRow_Task_Name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" /> // next two textviews are programmatically hidden right now <TextView android:id="@+id/ListRow_Task_Deadline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textSize="12sp" /> <TextView android:id="@+id/ListRow_Task_Tags" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/icon_tag" android:drawablePadding="4dip" android:textSize="12sp" /> </LinearLayout> </RelativeLayout>
¿Cómo puedo hacer que las casillas de verificación a la izquierda parezcan que se supone que?
- Android Listview en PopupWindow onitemclick no funciona en algún dispositivo
- android: listview: consigue el valor del cursor en el elemento click
- La posición de la vista de lista se cambia al desplazarse en android
- Cómo implementar la vista de búsqueda en la actividad (barra de acciones) cuando existe la vista de lista en el fragmento
- ¿Por qué no "notifyDatasetChanged ()" notifica todos los elementos visibles?
- ¿Cómo mostrar la barra de progreso en cada elemento de vista de lista?
- FrameLayout no se puede convertir en android.widget.AbsListView
- Cómo guardar el estado del fragmento teniendo listview
Copie las imágenes de la casilla de verificación Holo de la carpeta extraíble de Android para todos los dpis y resoluciones. A continuación, establezca el atributo android: button para el nuevo selector xml. De esta manera usted tendrá el control completo de cómo se ve en el dispositivo de destino.
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:state_focused="true" android:drawable="@drawable/btn_check_on_focused_holo_light" /> <item android:state_checked="false" android:state_focused="true" android:drawable="@drawable/btn_check_off_focused_holo_light" /> <item android:state_checked="false" android:drawable="@drawable/btn_check_off_holo_light" /> <item android:state_checked="true" android:drawable="@drawable/btn_check_on_holo_light" /> </selector>
Recientemente me encontré con el mismo problema y encontré solución real, no sólo una solución.
Cuando infla sus vistas en el método getView()
:
public View getView(int position, View convertView, ViewGroup parent) { return inflater.inflate(R.layout.list_item, parent, false); }
Debe asegurarse de que el inflador que utiliza contiene el contexto de la actividad y no el contexto de la aplicación porque el contexto de la actividad es consciente del tema que utiliza y la aplicación no.
Así que asegúrese de crear inflar de una de las siguientes maneras o similares:
-
LayoutInflater.from(activity);
-
getLayoutInflater(); // from within activity
-
LayoutInflater.from(parent.getContext());
Para comprobar rápidamente esta solución, simplemente reemplace:
return inflater.inflate(R.layout.list_item, parent, false);
con:
return LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
Yo también tuve este problema. Estoy usando Samsung Galaxy S4, y CheckBox en mi aplicación aparece tipo de escuela antigua. Si ejecuto la misma aplicación en "Android Emulator", se ve muy bien como yo quiero.
Lo mejor que te sugiero, no te preocupes. Simplemente cargue la aplicación en el mercado y debería estar bien.
Intenta establecer la variable targetSdkVersion en tu archivo AndroidManifest.xml a la más reciente (asegúrate de tener la versión sdk descargada):
android:targetSdkVersion="19"