2012-08-08 75 views
6

Help.I找到ListView的高度,我不知道px或dpi?我需要dpigetheight()px或dpi?

final ListView actualListView = mPullRefreshListView.getRefreshableView(); 

actualListView.getViewTreeObserver().addOnGlobalLayoutListener(
       new ViewTreeObserver.OnGlobalLayoutListener() { 
        public void onGlobalLayout() { 
         height = actualListView.getHeight(); 

        } 
       }); 
+0

的getHeight();總是以像素爲單位返回高度,請檢查此解決方案。 http://stackoverflow.com/questions/3166501/getting-the-screen-density-programmatically-in-android – 2012-08-08 10:21:50

+1

只是未來的一個旁註。你需要的可能是'dp'或'dip' - 它們代表*密度獨立像素*。 'dpi'是*每英寸點數*,它測量屏幕的密度,而不是尺寸。 – 2012-08-08 10:26:35

回答

26

的getHeight像素返回高度,下面是文檔說什麼..

public final int getHeight() 

從以下版本開始:API級別1

返回視圖的高度。 返回

視圖的高度,以像素爲單位。

您需要將px轉換爲dp,請使用以下方式將其轉換爲dp。

轉換像素DP:

public int pxToDp(int px) { 
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); 
    int dp = Math.round(px/(displayMetrics.xdpi/DisplayMetrics.DENSITY_DEFAULT)); 
    return dp; 
} 

,或者如果你想讓它下面PX使用。

轉換DP像素:

public int dpToPx(int dp) { 
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); 
    int px = Math.round(dp * (displayMetrics.xdpi/DisplayMetrics.DENSITY_DEFAULT));  
    return px; 
} 
1

使用此代碼,你可以得到運行時顯示的寬度&高度

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int height = displaymetrics.heightPixels; 
int wwidth = displaymetrics.widthPixels; 
+0

你能告訴我分辨率(以dpi爲單位)458像素的高度嗎? – 2012-08-08 10:32:46

+0

檢查這個你的答案http://coh.io/adpi/ – 2012-08-08 10:34:58