Samsung Galaxy S4 desalinea el icono de la barra de herramientas
Estoy implementando un diseño visual para una aplicación, y resulta que el Galaxy S4 desalinea el icono de inicio de la barra de acción, como se demuestra en la captura de pantalla:
- Holo Light con Dark Actionbar muestra Holo Dark copiar y pegar iconos
- Mostrar progreso spinner (actualizar) en ActionBar?
- ¿Cuál es la diferencia entre setDisplayHomeAsUpEnabled y setHomeButtonEnabled?
- Android: La barra de acción predeterminada se está poblando mientras se carga la aplicación
- Android: setActionView (null) no elimina problemas de vista y anchura en MenuItem con ActionView
Las capturas de pantalla se tomaron utilizando exactamente el mismo archivo APK en ambos dispositivos. La pauta púrpura se encuentra a 16dp de la izquierda, y es muy importante para el resto de la disposición de la pantalla. El S4 añade otro 8dp o menos. Este margen extra hace que el ícono de inicio se vea fuera de lugar.
He probado un montón de otros teléfonos Samsung en diferentes resoluciones / densidades (Galaxy S3, Galaxy S4 Mini, Galaxy Ace) y todos estos alinean el icono correctamente en 16dp.
Me atrevería a la fragmentación de Android y seguir adelante, pero la cuota de mercado de la Galaxy S4 es tan grande que realmente no puedo ignorar el problema. ¿Alguien más ha encontrado esto, y ha encontrado una solución?
- Altura de las lengüetas de ActionBar
- Android personalizado Overflow-menu (Sin barra de acción y sin menubutton)
- Añadir barra de acción en ListActivity
- OnNavigationItemSelected en ActionBar se está llamando en el inicio cómo puede evitarlo?
- Manera correcta de manejar la barra de acción hasta el botón?
- Personalización de android.widget.SearchView
- Cómo utilizar SearchView en la barra de herramientas de Android
- Cómo forzar el icono de desbordamiento de barra de acción para mostrar
Este código es bastante auto-explicativo. Primero comprueba si el dispositivo actual es un modelo Samsung Galaxy S4, basado en la lista que se encuentra aquí . Si es así, busca las View
relevantes basadas en el ActionBar
de ActionBar
y la posición relativa de ImageView
en la jerarquía. A continuación, los desplaza a la izquierda por el parámetro de offset
(positivo). También comprueba si se visualiza una View
personalizada y cambia también. El único cambio es a las coordenadas x
la View
, por lo que debería funcionar con cualquier tema o estilo.
private static final String SAMSUNG = "SAMSUNG"; private static final String[] S4_MODELS = { "GT-I9506", "GT-I9505G", "SGH-I337", "SGH-M919", "SCH-I545", "SPH-L720", "SCH-R970", "GT-I9508", "SCH-I959", "GT-I9502", "SGH-N045", "SGH-I337M", "SGH-M919V", "SCH-R970X", "SCH-R970C" }; private void adjustGalaxyS4(int offset) { if (isGalaxyS4()) shiftHomeView(offset); } private boolean isGalaxyS4() { String manufacturer = Build.MANUFACTURER.toUpperCase(); String model = Build.MODEL.toUpperCase(); if (SAMSUNG.equals(manufacturer) && !TextUtils.isEmpty(model)) { for (String m : S4_MODELS) if (model.contains(m)) return true; } return false; } private void shiftHomeView(float offset) { try { View grandParentView = (View) ((View) findViewById(android.R.id.home).getParent()).getParent(); View upView = ((ViewGroup) ((ViewGroup) grandParentView).getChildAt(0)).getChildAt(0); grandParentView.setX(grandParentView.getX() - offset); upView.setX(upView.getX() + offset); if ((getActionBar().getDisplayOptions() & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) getActionBar().getCustomView().setX(getActionBar().getCustomView().getX() - offset); } catch (Exception e) { // Fail silently } }
- La importación de Android no se pudo resolver
- Canal de entrada cerrado del editor o se ha producido un error. Eventos = 0x8