272 votos

Altura de la barra de estado de Android

¿Cuál es la altura de la barra de estado de Android? Es siempre la misma?

Desde mi mediciones parece que es 25dp, pero no estoy seguro de si tiene la misma altura en todas las plataformas.

(Quiero saber esto para implementar correctamente una transición de fundido de una actividad que no tiene barra de estado para uno que lo hace)

312voto

Elenasys Puntos 23268

esta pregunta fue respondida antes de... Altura de la barra de estado?

Actualización:: ok, a la altura de la barra de estado depende del tamaño de la pantalla, por ejemplo, en un dispositivo de con 240 X 320 tamaño de la pantalla la barra de estado de la altura es de 20 píxeles, para un dispositivo con 320 X 480 tamaño de la pantalla la barra de estado de la altura es espacio de 25 píxeles situado, para un dispositivo con 480 x 800 de la barra de estado la altura debe ser 38px

así que recomiendo el uso de esta secuencia de comandos para obtener la altura de la barra de estado

Rect rectangle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight= rectangle.top;
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;

   Log.i("*** Jorgesys :: ", "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

para obtener la Altura de la barra de estado en la onCreate() método de su Actividad, el uso de este método:

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
} 

184voto

Ben Clayton Puntos 16793

De todos los ejemplos de código que he utilizado para obtener la altura de la barra de estado, el único que realmente funciona en la onCreate método de un Activity es este:

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Al parecer, la altura real de la barra de estado se mantiene como un Android de recursos. El código anterior puede ser añadido a un ContextWrapper de la clase (por ejemplo, Activity).

Encontrado en http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/

49voto

Grantland Chew Puntos 1377

En MDPI dispositivos, la barra de estado es el espacio de 25 píxeles situado. Podemos utilizar esto como la base y se multiplica por la densidad (redondeado hacia arriba) para obtener el estado de la altura de la barra en cualquier dispositivo:

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

Referencia: ldpi=.75, mdpi=1, ipap=1.5, xhdpi=2

13voto

benedict Puntos 156

Yo tengo el mismo problema de tener que conseguir el estatus de altura de la barra en un onCreate. Esto funciona para mí.

private static final int LOW_DPI_STATUS_BAR_HEIGHT = 19;

private static final int MEDIUM_DPI_STATUS_BAR_HEIGHT = 25;

private static final int HIGH_DPI_STATUS_BAR_HEIGHT = 38;

En el interior de la onCreate:

DisplayMetrics displayMetrics = new DisplayMetrics();
((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displayMetrics);

int statusBarHeight;

switch (displayMetrics.densityDpi) {
    case DisplayMetrics.DENSITY_HIGH:
        statusBarHeight = HIGH_DPI_STATUS_BAR_HEIGHT;
        break;
    case DisplayMetrics.DENSITY_MEDIUM:
        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
        break;
    case DisplayMetrics.DENSITY_LOW:
        statusBarHeight = LOW_DPI_STATUS_BAR_HEIGHT;
        break;
    default:
        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
}

Ver:

http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

12voto

Braj Puntos 91

Sí, cuando yo intente con la Vista que ofrece el resultado de espacio de 25 píxeles situado. Aquí está el código completo :

public class SpinActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout lySpin = new LinearLayout(this);
        lySpin.setOrientation(LinearLayout.VERTICAL);       
        lySpin.post(new Runnable()
        {
            public void run()
            {
                Rect rect = new Rect();
                Window window = getWindow();
                window.getDecorView().getWindowVisibleDisplayFrame(rect);
                int statusBarHeight = rect.top;
                int contentViewTop = 
                    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
                int titleBarHeight = contentViewTop - statusBarHeight;
                System.out.println("TitleBarHeight: " + titleBarHeight 
                    + ", StatusBarHeight: " + statusBarHeight);
            }
        }
    }
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X