una triangulo simbolos significado significa samsung sale que notificaciones mano los iconos flechas dentro con celulares celular barra android android-actionbar

android - triangulo - Samsung Galaxy S4 desalinea el icono de la barra de acción



triangulo con 2 flechas dentro samsung (1)

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 muestra en la captura de pantalla:

Las capturas de pantalla se tomaron utilizando exactamente el mismo archivo APK en ambos dispositivos. La guía púrpura se encuentra a 16dp desde la izquierda, y es muy importante para el resto del diseño de la pantalla. El S4 agrega otro 8dp más o menos. Este margen adicional hace que el icono de la casa realmente se vea fuera de lugar.

He probado un montón de otros teléfonos Samsung con diferentes resoluciones / densidades (Galaxy S3, Galaxy S4 Mini, Galaxy Ace) y todos estos alinean el ícono correctamente a 16dp.

Lo atribuyo a la fragmentación de Android y seguiré adelante, pero la participación de mercado del Galaxy S4 es tan grande que no puedo ignorar el problema. ¿Alguien más ha encontrado esto, y encontró una solución?


Este código es bastante autoexplicativo. Primero verifica si el dispositivo actual es un modelo Samsung Galaxy S4, según la lista que se encuentra aquí . Si es así, busca las View relevantes en función del ActionBar la ActionBar de ActionBar y la posición relativa de ImageView en la jerarquía. Luego los desplaza hacia la izquierda por el parámetro de offset (positivo). También verifica si se muestra una View personalizada, y también la cambia. El único cambio es a las coordenadas de 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 } }