我有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);
}
答案 0 :(得分:1)
我已经使用这个逻辑完成了这个,首先你需要获得ListView的高度和适配器getView方法中View的高度,然后在你的点击事件中写下这段代码。
int offset =((listViewheight / 2) - (viewHeight / 2));
mListView.smoothScrollToPositionFromTop(位置,Math.abs(偏移));
希望这对你有用。
答案 1 :(得分:0)
使用此属性item_layout.setGravity(Gravity.CENTER);