3

我有一个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);
}
4

2 回答 2

1

我首先使用此逻辑完成了此操作,您必须在适配器 getView 方法中获取 ListView 的高度和 View 的高度,然后在单击事件中编写此代码。

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

mListView.smoothScrollToPositionFromTop(position,Math.abs(offset));

希望这对你有用。

于 2014-08-20T07:21:53.003 回答
0

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

于 2013-11-14T08:15:04.347 回答