在Android中选中时,屏幕上的列表项居中?

时间:2014-04-05 15:15:09

标签: java android listview centering

我有一个listView,一个计时器遍历每个列表项。理想情况下,我想让当前选中的项目自动居中于listView。我已经使用了smoothScrollToPosition(),但我对如何计算当前项目的中心感到很遗憾。

我的更正代码(感谢Matej Spili):

// Smooth scroll the list item 
try {
scrollView.smoothScrollBy(scrollView.getChildAt().getTop(‌​) - (scrollView.getHeight() / 2) + (scrollView.getChildAt().getHeight() / 2), 1500);
} 
catch (NullPointerException e)
{ 
System.out.println("NULL POINTER DEALT WITH");
}

1 个答案:

答案 0 :(得分:1)

首先,使用 getHeight 获取ListView的高度,返回ListView的高度(以像素为单位)。

然后,使用相同的方法获取行视图的高度。

然后,使用 setSelectionFromTop 并传入ListView高度的一半减去行高度的一半。

类似的东西:

int h1 = mListView.getHeight();
int h2 = v.getHeight();

mListView.setSelectionFromTop(position, h1/2 - h2/2);

或者,你可能只是从顶部为偏移量选择一个常量而不是数学,但我认为它可能在不同的设备上更脆弱,因为setSelectionFromTop的第二个参数看起来像素而不是设备独立像素。

我还没有对这段代码进行过测试,但只要您的行的高度大致相同,它就可以正常工作。

或者在一行中:

scrollView.smoothScrollTo(0, selectedView.getTop() - (scrollView.getHeight() / 2) + (selectedView.getHeight() / 2), 0);