我在我的屏幕中有一个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