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

标签 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);
}

最佳答案

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

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

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

希望这对你有用。

关于android - 将 ListView 项目放在可见区域的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972509/

相关文章:

android - 如何处理 fragment 内的网络调用

Android startBluetoothSco() 不工作

android - 如何在gridview中单击图像添加音频

android - 我无法通过单击 imageButtom 删除带有自定义适配器的 ListView 中的正确项目

java - 将项目添加到 ArrayAdapter<String>

Android大gridview滞后,移动缓慢

java - 如何更新 ListView 中的记录以及android中的数据库

android - 软件更新 macOS Mojave 后 ADB 不工作

java - 相同的 Android ListView 代码在一个版本的应用程序中滚动时断断续续,而在其他版本中则不是。 (已知的调整执行)

Android - 如何停止 ListView.setAdapter();打断 ScrollView ?