【问题标题】:Centering a list item on the screen when selected in Android?在Android中选择时在屏幕上居中列表项?
【发布时间】:2014-05-17 22:36:33
【问题描述】:

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

【问题讨论】:

    标签: java android listview centering


    【解决方案1】:

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

    然后,用同样的方法获取该行的View的高度。

    然后,使用 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);
    

    【讨论】:

    • 谢谢你,让我走上正轨。 :) 我不得不使用一个 try 块,因为我在最后一个项目上得到一个空指针错误。我的最终代码是: ` // 平滑滚动列表项 try { scrollView.smoothScrollBy(scrollView.getChildAt(Object.getCurrentStep()).getTop() - (scrollView.getHeight() / 2) + (scrollView.getChildAt(Object .getCurrentStep()).getHeight() / 2), 1500); } catch (NullPointerException e) { System.out.println("NULL POINTER DEALT WITH"); }`
    • 我很高兴能帮上忙...请编辑您的问题并把它放在那里..也请投票支持我的问题:)祝你好运,玩得开心:)
    • 我是新手,已经添加了解决方案,但还没有代表支持,抱歉。 :(
    • 感谢@Mint_Sauce 的异常评论!不错的添加和+1!我最终也使用了 smoothScrollBy 来获得我想要的东西。我的单元格大小不同。
    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多