将ListView项放在可见区域的中心

时间:2013-11-14 08:06:49

标签: android android-listview android-arrayadapter centering

我有ListView,其中包含ArrayAdapter,其中包含当天每小时的项目,我需要将包含当前小时的项目放在可见区域的中心ListView。

我已尝试setSelection,但它会将项目放在顶部而不是中心。

有没有任何方法可以在不计算布局高度等的情况下进行此操作?

现在我正在使用这种方法,因为我知道这些物品的高度为40dip,但它们并不总是高40dip。

private void centerListView() {
    final Calendar c = Calendar.getInstance();
    final int hour = c.get(Calendar.HOUR_OF_DAY);
    final int listViewProgrammerPixels = listViewProgrammer.getHeight();
    final int itemPixels = (int) (40 * getResources().getDisplayMetrics().density + 0.5f);
    final int pixelsFromTop = (listViewProgrammerPixels - itemPixels) / 2;
    listViewProgrammer.setSelectionFromTop(hour, pixelsFromTop);
}

2 个答案:

答案 0 :(得分:1)

我已经使用这个逻辑完成了这个,首先你需要获得ListView的高度和适配器getView方法中View的高度,然后在你的点击事件中写下这段代码。

int offset =((listViewheight / 2) - (viewHeight / 2));

mListView.smoothScrollToPositionFromTop(位置,Math.abs(偏移));

希望这对你有用。

答案 1 :(得分:0)

使用此属性item_layout.setGravity(Gravity.CENTER);