我在我的屏幕中有一個listView。這個listView填充了我屏幕的2/3(所以它的高度因不同的設備而異)。我有 - 可以說在我的數組列表中有50個項目 - 但我需要在其中放置X個項目,這對用戶是可見的(例如,在小屏幕3上,在正常屏幕5上,在平板電腦8上)。Android#View.getHeight()不返回正確的值
所以我在做的方式是在PX中獲取listView的高度,然後得到它的DP尺寸,因爲我知道每行的高度是60dp,然後將DP格式的listViwe的高度除以行的高度60dp)。因此,它會返回用戶可見的項目數量,並將此數字傳遞給我的適配器的getCount()
方法以填充此數量的項目。
這是我的代碼,我有一個將被分配一些地方在onCreate()
方法這樣this.mListView.getViewTreeObserver().addOnGlobalLayoutListener(mListViewGlobalListener);
ViewTreeObserver.OnGlobalLayoutListener mListViewGlobalListener = new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
removeListViewListener();
if (mListView == null || mAdapter == null)
{
return;
}
int heightInPx = mListView.getHeight();
int heightInDp = pixelsToDp(heightInPx, getResources().getDisplayMetrics());
int maxDisplayDriver = heightInDp/60;
mAdapter.setMaxDisplayDrivers(maxDisplayDriver);
Logger.error("TEST", "heightInPx:" + heightInPx + ", heightInDp:" + heightInDp + ", maxDisplayDriver:" + maxDisplayDriver);
}
};
public static int pixelsToDp(int px, DisplayMetrics metrics)
{
return (int) (px/metrics.density);
}
觀察員現在,當我運行的應用程序,我有以下日誌:E/TEST: heightInPx:96, heightInDp:32, maxDisplayDriver:0
我相信高度是錯誤的,因爲我可以在屏幕上放置至少4個項目,這將是240dp,而日誌顯示其他內容。任何想法將不勝感激。謝謝。
你試過'mListView.getLayoutParams()。height'代替了嗎? – BNK
@BNK,謝謝你更糟。日誌顯示'E/TEST:heightInPx:-2,heightInDp:0,maxDisplayDriver:0' – Hesam
對不起,希望以下鏈接對你有所幫助http://stackoverflow.com/questions/15039913/android-how -to-measure-total-height-of-listview – BNK