没有状态栏,actionBar和标签的屏幕高度

Kæm*_*ker 14 android android-actionbar

我有一个ListView,我希望每行填充可用屏幕的三分之一.我可以看到状态栏,然后是一个带有slidingTabs的actionBar.我正在做这样的当前计算:

height = context.getResources().getDisplayMetrics().heightPixels;
if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,context.getResources().getDisplayMetrics());
        Log.d("actionBarHeigth", actionBarHeight.toString());
    }
Run Code Online (Sandbox Code Playgroud)

并设置视图高度如下:

holder.imageView.getLayoutParams().height = (height - actionBarHeight*2) / 3;
Run Code Online (Sandbox Code Playgroud)

但是列表的行有点太大了,我想这是导致它的状态栏.如何将其高度添加到我的计算中?

Kæm*_*ker 10

根据@rasmeta的回答,我制作了这个代码并且它可以解决问题.我的行现在恰好是可用屏幕的三分之一.以下是获取状态栏高度的方法:

int resource = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resource > 0) {
        statusBarHeight = context.getResources().getDimensionPixelSize(resource);
    }
Run Code Online (Sandbox Code Playgroud)

并且每行高度的计算如下:

holder.imageView.getLayoutParams().height = (screenHeight - statusBarHeight - actionBarHeight*2) / 3;
// actionBarHeight * 2 because the tabs have the same height as the actionBar.
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用此代码:

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)

如此处所述:https : //stackoverflow.com/a/3410200/1763138

请尝试使用此解决方案并告诉我们它是否有效。;)