可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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>