2015-04-17 83 views
11

我有一個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()); 
    } 

和設置的意見高度是這樣的:

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

但是,列表的行會稍微太大了,我想它的狀態欄造成它。我如何將它的高度加到我的計算中?

+0

你能完整地發佈你的課程的XML文件嗎? – apmartin1991

回答

8

基於@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. 
3

您可以使用此代碼:

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

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

請嘗試使用此解決方案,並告訴我們,如果它的工作。 ;)

+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – mmackh

+0

謝謝你的建設性意見 - 你是對的。我已經爲未來的訪問者編輯了答案。 – rasmeta

0

最簡單的方法是這樣的:

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> 
相關問題