3

У меня есть ListView который содержит ArrayAdapter который содержит предметы для каждого часа дня, и мне нужно, чтобы поместить элемент, который содержит текущий час в центре видимого области ListView.Place 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

Показать код элемента списка .show your code –

+1

Существует много способов сделать это. Необходимо увидеть код – FaddishWorm

+0

Вы можете скопировать содержимое этого элемента в другой 'View', а затем установить его свойство' gravity' 'center'. – NitroNbg

ответ

0

Используйте это свойство item_layout.setGravity(Gravity.CENTER);

1

Я сделал это, используя эту логику первых, вы должны получить высоту ListView и высоту просмотра в адаптере метод GetView затем записать этот код в событие щелчка.

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

mListView.smoothScrollToPositionFromTop (позиция, Math.abs (смещение));

Надеюсь, что это сработает для вас.

Смежные вопросы