¿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)
Respuestas
¿Demasiados anuncios?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;
}
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/
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
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
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);
}
}
}
}