Iconos de preferencias de Android no centrados en dispositivos => Lollipop

He añadido un icono a un ListPreference con android: icono, pero en los dispositivos con Lollipop o Marshmallow, el icono se coloca en el lado izquierdo del espacio disponible en lugar de en el centro donde está en los dispositivos pre-Lollipop, y cómo debería ser.

Los dispositivos pre-Lollipop (api 18 – JB 4.3), así es como debería ser!

Introduzca aquí la descripción de la imagen

Post-Lollipop (api 23 – MM), icono no centrado.

Introduzca aquí la descripción de la imagen

PreferenceScreen

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/general"> <ListPreference android:defaultValue="@string/pref_languages_default" android:entries="@array/languages" android:entryValues="@array/listLangValues" android:icon="@drawable/translate" android:key="language" android:title="@string/languages" /> </PreferenceCategory> </PreferenceScreen> 

Translate.xml drawable

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:fillColor="#fff" android:pathData="M12.87,15.07L10.33,12.56L10.36,12.53C12.1,10.59 13.34,8.36 14.07,6H17V4H10V2H8V4H1V6H12.17C11.5,7.92 10.44,9.75 9,11.35C8.07,10.32 7.3,9.19 6.69,8H4.69C5.42,9.63 6.42,11.17 7.67,12.56L2.58,17.58L4,19L9,14L12.11,17.11L12.87,15.07M18.5,10H16.5L12,22H14L15.12,19H19.87L21,22H23L18.5,10M15.88,17L17.5,12.67L19.12,17H15.88Z" /> </vector> 

¿Cómo puedo centrarlo en LL o MM?

He pasado todo el día tratando de averiguar lo mismo. Terminé fijando el diseño para cada preferencia a una versión modificada del diseño del defecto. Cambié el relleno de la imagen de -4dp a 0dp y la minwidth de icon_frame de 60dp a 56dp.

Definitivamente no es ideal, pero funcionará por ahora.

Asi que

Añada el diseño de preferencias a ListPreference en la pantalla Preferencias:

 <ListPreference android:defaultValue="@string/pref_languages_default" android:entries="@array/languages" android:entryValues="@array/listLangValues" android:icon="@drawable/translate" android:key="language" android:title="@string/languages" android:layout="@layout/my_preference" /> 

Y crear layout \ my_preference.xml:

 <?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2014 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <android.support.v7.widget.LinearLayoutCompat 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" android:background="?android:attr/activatedBackgroundIndicator" android:clipToPadding="false" android:gravity="center_vertical" android:minHeight="?attr/listPreferredItemHeightSmall" android:orientation="horizontal" android:paddingEnd="?attr/listPreferredItemPaddingRight" android:paddingLeft="?attr/listPreferredItemPaddingLeft" android:paddingRight="?attr/listPreferredItemPaddingRight" android:paddingStart="?attr/listPreferredItemPaddingLeft" tools:ignore="NewApi"> <android.support.v7.widget.LinearLayoutCompat android:id="@+id/icon_frame" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginStart="0dp" android:gravity="start|center_vertical" android:minWidth="56dp" android:orientation="horizontal" android:paddingBottom="4dp" android:paddingEnd="12dp" android:paddingRight="12dp" android:paddingTop="4dp"> <android.support.v7.widget.AppCompatImageView android:id="@+android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxHeight="48dp" android:maxWidth="48dp" /> </android.support.v7.widget.LinearLayoutCompat> <RelativeLayout android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:paddingBottom="16dp" android:paddingTop="16dp"> <android.support.v7.widget.AppCompatTextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?attr/textAppearanceListItem" tools:text="title" /> <android.support.v7.widget.AppCompatTextView android:id="@android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@android:id/title" android:layout_alignStart="@android:id/title" android:layout_below="@android:id/title" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" tools:text="summary" /> </RelativeLayout> <!-- Preference should place its actual preference widget here. --> <android.support.v7.widget.LinearLayoutCompat android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="end|center_vertical" android:orientation="vertical" android:paddingLeft="16dp" android:paddingStart="16dp" /> 

Una vez más, definitivamente no es la solución correcta, pero es una solución. Espero que ayude.

En realidad no hay nada malo

Introduzca aquí la descripción de la imagen

https://material.io/guidelines/patterns/settings.html#settings-placement

Entonces todo esta bien

  • ¿Cómo se anima el icono de estado de sincronización de Android?
  • ¿Dónde puedo encontrar los iconos predeterminados de Android?
  • El icono de idioma de Prestashop se ve mal en el móvil
  • Tamaño del icono de notificación en Android
  • NotificationCompat 4.1 SetSmallIcon y SetLargeIcon
  • Icono que no se muestra en la notificación: se muestra un cuadrado blanco en su lugar
  • Icono de Android contra el logotipo
  • Preferencia de Android android: icon getIcon null
  • El icono de la aplicación de Android no cambia en el teléfono a pesar de reiniciar, desinstalar y volver a instalar
  • ¿Cómo puedo deshacerme del espacio de fondo transparente en (Android Asset Studio - Icon Generator)?
  • Android .setColor para Icono grande
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.