Высота экрана без строки состояния, actionBar и вкладок
У меня есть ListView, который я хочу, чтобы каждая строка заполнила треть доступного экрана. У меня есть индикатор состояния, а затем actionBar с slideTabs внизу. Я делаю текущие вычисления следующим образом:
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());
}
И установите высоту представлений следующим образом:
holder.imageView.getLayoutParams().height = (height - actionBarHeight*2) / 3;
Но строки списка немного слишком велики, и я предполагаю, что строка состояния вызывает его. Как добавить его к моим вычислениям?
Ответы
Ответ 1
Основываясь на ответе @rasmeta, я сделал этот код, и он делает трюк. Мои ряды теперь составляют ровно треть доступного экрана. Вот как получить высоту строки состояния:
int resource = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resource > 0) {
statusBarHeight = context.getResources().getDimensionPixelSize(resource);
}
И вычисление высоты каждой строки выглядит следующим образом:
holder.imageView.getLayoutParams().height = (screenHeight - statusBarHeight - actionBarHeight*2) / 3;
// actionBarHeight * 2 because the tabs have the same height as the actionBar.
Ответ 2
Вы можете использовать этот код:
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
как описано здесь: fooobar.com/questions/27720/...
Попробуйте использовать это решение и сообщите нам, если он сработает.;)
Ответ 3
Самый простой способ:
int height = findViewById(R.id.rootView).getHeight();
rootView - это макет главного корня:
<?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>