Height of screen without status bar, actionBar and tabs

匿名 (未验证) 提交于 2019-12-03 08:35:02

问题:

I have a ListView that I want each row to fill a third of the available screen. I have the status bar visible, and then an actionBar with slidingTabs beneath. I'm doing the current calculation like this:

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());     } 

And setting the views height like this:

holder.imageView.getLayoutParams().height = (height - actionBarHeight*2) / 3; 

But the rows of the list are slightly too big, and i guess it's the status bar causing it. How can I add the height of it to my calculations?

回答1:

Based on @rasmeta 's answer I made this code and it does the trick. My rows are now exactly a third of the available screen. Here is how to get the height of the status bar:

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

And the calculation of the height of each row goes like this:

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


回答2:

You can use this code:

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

as described here: https://stackoverflow.com/a/3410200/1763138

Please try using this solution and tell us if it worked. ;)



回答3:

The easiest way is this:

int height = findViewById(R.id.rootView).getHeight(); 

rootView is the master root layout :

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/rootView"     android:orientation="vertical"     android:layout_width="match_parent"     android:layout_height="match_parent">       ... </LinearLayout> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!