android通知栏和标题栏的大小?

lal*_*lei 24 android

有没有办法获得android中通知栏和标题栏的大小?目前我获得了显示宽度和高度:

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Run Code Online (Sandbox Code Playgroud)

之后,我想减去条形的大小,这样我就可以在不丢失宽高比的情况下拉伸视频.目前我隐藏了酒吧,因为我看不到更好的方式.

Don*_*Gru 19

也许这是一种有用的方法:参考图标设计指南,状态(通知)栏只有三种不同的高度,具体取决于屏幕密度:

  • LDPI为24px
  • MDPI为32px
  • HDPI为48px

所以,如果你使用检索设备的屏幕密度densityDpiDisplayMetrics你知道减去其值

所以看起来像这样:

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int myHeight = 0;

    switch (metrics.densityDpi) {
        case DisplayMetrics.DENSITY_HIGH:
            Log.i("display", "high");
            myHeight = display.getHeight() - 48;
            break;
        case DisplayMetrics.DENSITY_MEDIUM:
            Log.i("display", "medium/default");
            myHeight = display.getHeight() - 32;
            break;
        case DisplayMetrics.DENSITY_LOW:
            Log.i("display", "low");
            myHeight = display.getHeight() - 24;
            break;
        default:
            Log.i("display", "Unknown density");
Run Code Online (Sandbox Code Playgroud)


sh0*_*0m1 19

*据我所知,这完美无缺.

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


cdh*_*ker 18

Martin的回答指出了错误的高度(至少从SDKv11开始).根据图标设计指南,状态栏图标的高度为25dp,而不是32dp.25dp转化为这些密度特定的高度:

  • LDP为19px
  • MDPI为25px
  • HDPI为38px
  • XHDPI为50px

观察这些大小的简单方法是对具有正常密度的仿真器或设备使用hierarchyviewer.只需查看getHeight()标题栏的FrameLayout值即可.状态栏有点棘手,因为它是DecorView的一部分而不是视图本身,所以通过查看位于mTop状态栏正下方的标题栏的FrameLayout来间接获得它的高度.根据我的观察,状态栏和标题栏各自匹配状态栏图标的25dp高度(我还没有看到SDKv11中android ref中的这个事实的声明).