- Горизонтальный ListView в Android?
- 19 ответов
- Как создать горизонтальный ListView в Android?
- Горизонтальный ListView в Android?
- Horizontal ListView Android Without RecyclerView | Custom Example
- See the video
- Step 1. Adding Attributes
- Step 2. Horizontal Class
- Step 3. Images of vehicle
- Step 4. ListView Row Layout
- Step 5. Model For Horizontal ListView
- Step 6. Horizontal Adapter
- Step 7. Main Activity Modification
- Thoughts on above code
Горизонтальный ListView в Android?
Можно ли сделать ListView горизонтально? Я сделал это в виде галереи, но выбранный элемент автоматически попадает в центр экрана. Я не хочу, чтобы выбранный элемент находился в том же месте, где я щелкнул. Как я могу исправить эту проблему? Моя идея заключалась в том, чтобы установить ListView с горизонтальной прокруткой. Поделитесь своей идеей?
19 ответов
Согласно документации Android RecyclerView является новый способ упорядочить элементы в списке и отображать их по горизонтали
Преимущества:
- Поскольку при использовании адаптера Recyclerview используется шаблон ViewHolder автоматически реализовано
- Анимацию легко выполнить
- Еще много функций
Дополнительная информация о RecyclerView :
Пример:
Просто добавьте блок ниже, чтобы сделать ListView горизонтальным из вертикального
Фрагмент кода
Пол не пытается исправить ошибки в своей библиотеке или принять исправления пользователей. Вот почему я предлагаю другую библиотеку с аналогичной функциональностью:
Обновление : 24 июля 2013 г. автор (sephiroth74) выпустил полностью переписанную версию, основанную на коде Android 4.2.2 ListView. Я должен сказать, что в нем нет всех ошибок, которые были в предыдущей версии, и он отлично работает!
Ответ @Paul ссылается на отличное решение, но код не позволяет использовать onClickListeners для дочерних элементов (функции обратного вызова никогда не вызываются). Некоторое время я пытался найти решение, и я решил опубликовать здесь то, что вам нужно изменить в этом коде (на случай, если кому-то это понадобится).
Вместо переопределения dispatchTouchEvent переопределите onTouchEvent . Используйте тот же код dispatchTouchEvent и удалите метод (разницу между ними можно прочитать здесь http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers)
Затем добавьте следующий код, который решит украсть событие у дочерних элементов и передать его нашему onTouchEvent или позволить им обработать его.
Наконец, не забудьте объявить переменные в своем классе:
Поскольку Google представила Android Support Library v7 21.0.0, вы можете использовать RecyclerView для горизонтальной прокрутки элементов. Виджет RecyclerView — это более продвинутая и гибкая версия ListView.
Чтобы использовать RecyclerView, просто добавьте зависимость:
Дополнительная информация о RecyclerView:
Это немного (очень) поздно, но я отправляю это на случай, если кто-то придет позже.
В библиотеке поддержки предварительной версии Android L есть RecyclerView делает именно то, что вы хотите.
Прямо сейчас вы можете получить его только через L preview SDK, и вам нужно установить minSdk на L . Но вы можете скопировать все необходимые файлы в свой проект и использовать их таким образом, пока L официально не выйдет.
Документы для предварительного просмотра можно загрузить здесь.
Предупреждение: API для Recycler View может измениться, и в нем могут быть ошибки.
Обновлено
Исходный код для горизонтального просмотра списка:
Загрузите файл jar с здесь
Теперь поместите его в папку libs, щелкните его правой кнопкой мыши и выберите «Добавить как библиотеку».
Теперь в main.xml поместите этот код
Теперь в классе Activity, если вы хотите горизонтальный список с изображениями, поместите этот код
На самом деле это очень просто : просто поверните список, чтобы положить его на бок
Затем, после надувания дочерних элементов, это должно быть внутри метода getView. вы поворачиваете детей, чтобы они встали прямо:
Изменить: если ваш ListView не помещается должным образом после поворота, поместите ListView внутри этого RotateLayout следующим образом:
Мое решение — просто использовать виджет ViewPager . Он не заблокирован по центру, как Gallery , и имеет встроенные функции для повторного использования представлений (как ListView ). Вы можете увидеть аналогичный подход в приложении Google Play, когда имеете дело с горизонтально прокручиваемыми списками.
Вам просто нужно расширить PagerAdapter и выполнить там пару настроек:
В результате у вас будет виджет с горизонтальной прокруткой с адаптером, например:
Примечание. Android теперь поддерживает горизонтальные представления списка с помощью RecyclerView, поэтому теперь этот ответ не рекомендуется для получения информации о RecyclerView: https://developer.android.com/reference/android/support/ v7 / widget / RecyclerView
Я разработал логику, чтобы сделать это без использования какой-либо внешней библиотеки горизонтальной прокрутки, вот полученный мной горизонтальный вид, и я разместил свой ответ здесь: https://stackoverflow.com/a/33301582/5479863
Мой ответ json таков:
Работающий здесь трюк — это идентификатор, который я назначил ImageView «imgView.setId (v)», и после этого, применяя к нему onClickListener, я снова получаю идентификатор представления . Я также прокомментировал внутри кода, поэтому что это легко понять, надеюсь, это может быть очень полезно . Удачного кодирования . 🙂
Это небольшой ответ, но как насчет использования просмотра с горизонтальной прокруткой ?
Источник
Как создать горизонтальный ListView в Android?
Возможный дубликат:
Горизонтальный ListView в Android?
Как и многие вещи в Android, вы бы не подумали, что это будет такая сложная проблема, но оххх, по golly, вы ошибаетесь. И, как и многие другие вещи в Android, API даже не обеспечивает достаточно расширяемую отправную точку. Я буду проклят, если я собираюсь бросить свой собственный ListView, когда все, что я хочу, это взять вещь и повернуть ее на свою сторону. \ декламация
Хорошо, теперь, когда я закончил дымиться, давайте поговорим о самой проблеме. Мне нужно в основном что-то вроде Gallery , но без функции блокировки центра. Мне не нужен список ListView ListSelector, но он приятный. В основном, я мог бы делать то, что я хочу, с LinearLayout внутри ScrollView , но мне нужны представления для детей из ListAdapter и мне бы очень хотелось иметь ListAdapter вида. И я действительно не хочу писать код макета.
Я заглянул в исходный код для некоторых из этих классов …
Галерея. Похоже, я мог бы использовать Галерею, если бы переопределял большинство методов onXyz, копировал весь их исходный код, но воздержитесь от вызова scrollIntoSlots() . Но я уверен, что если я это сделаю, я натолкнулся на какое-то поле члена, которое недоступно или какое-то другое непредвиденное последствие.
AbsSpinner: Поскольку поле mRecycler является mRecycler пакетом, я сомневаюсь, что смогу расширить этот класс.
AbsListView: похоже, этот класс предназначен только для вертикальной прокрутки, поэтому никакой помощи нет.
AdapterView: мне никогда не приходилось распространять этот класс напрямую. Если вы скажете мне, что это легко сделать, и что легко перевернуть мой собственный RecycleBin , я буду очень скептически настроен, но я сделаю это.
Полагаю, я мог бы скопировать обе AbsSpinner и Gallery чтобы получить то, что я хочу … надеюсь, что эти классы не используют какую-то переменную пакета, к которой я не могу получить доступ. Неужели вы думаете, что это хорошая практика? Есть ли у кого-нибудь учебники или сторонние решения, которые могут поставить меня в правильном направлении?
Обновить:
Единственное решение, которое я нашел до сих пор, – это все сделать сам. Поскольку я AdapterView этот вопрос, я переопределил AdapterView и внедрил свой собственный «HorizontalListView» с нуля. Единственный способ по-настоящему переопределить функцию блокировки центра галереи – переопределить частный метод scrollIntoSlots , который, как мне кажется, потребует создания подкласса во время выполнения. Если вы достаточно смелы, чтобы сделать это, это, возможно, лучшее решение, но я не хочу полагаться на недокументированные методы, которые могут измениться.
Swathi EP ниже предположил, что я даю Gallery OnTouchListener и переопределить функциональность прокрутки. Если вам не нужно иметь поддержку fling в вашем списке, или если все будет хорошо, если взгляды будут привязаны к центру в конце анимации fling, тогда это сработает для вас! Тем не менее, в конце концов, все еще оказывается невозможным удалить функцию блокировки центра, не снимая опорную опору. И я спрашиваю вас, какой список не бросает?
Так что, увы, это не сработало для меня. 🙁 Но если вас интересует такой подход, читайте дальше …
Мне также пришлось внести некоторые дополнения в код Swathi, чтобы получить то, что я хотел. В GestureListener.onTouch , помимо делегирования на детектор жестов, мне также пришлось возвращать true для ACTION_UP и ACTION_CANCEL . Это успешно отключило функцию блокировки центра, но также отключило движение. Я смог снова включить fling, предоставив свой собственный делегат onFling методу onFling в галерее. Если вы хотите попробовать, зайдите в свой примерный образец ApiDemos и замените класс Gallery1.java следующим кодом:
Прочитав этот пост, я внедрил свой собственный горизонтальный ListView . Вы можете найти его здесь: http://dev-smart.com/horizontal-listview/. Дайте мне знать, если это поможет.
Вы изучили использование HorizontalScrollView, чтобы обернуть элементы списка? Это позволит каждому элементу списка быть горизонтально прокручиваемым (то, что вы вкладываете в него, зависит от вас и может сделать их динамическими элементами, похожими на ListView). Это будет хорошо работать, если вы только после одного ряда элементов.
Вы знаете, возможно было бы использовать существующий ListView с некоторым разумным переопределением dispatchDraw() (чтобы повернуть холст на 90 градусов), onTouch() (чтобы поменять местами X и Y кодов MotionEvent) и, возможно, onMeasure () Или что-то другое, чтобы обмануть его в мысли, что это y х, а не х …
Я понятия не имею, действительно ли это будет работать, но было бы интересно узнать. 🙂
Это может быть очень поздний ответ, но он работает для нас. Мы используем ту же галерею, представленную Android, именно так, мы скорректировали левое поле таким образом, чтобы оставшиеся экраны считались центром галереи. Это действительно сработало для нас.
Я использовал Pauls (см. Его ответ ). Реализация HorizontalListview, и он работает, большое вам спасибо за обмен!
Я немного изменил свой HorizontalListView-Class (кстати, у Paul есть опечатка в вашем имени класса, ваше имя класса – «HorizontialListView», а не «HorizontalListView», «i» – это слишком много), чтобы обновлять дочерние представления при выборе.
UPDATE: мой код, который я опубликовал здесь, был неправильным, я полагаю, поскольку у меня возникли проблемы с выбором (я думаю, что это связано с переходом на просмотр), мне нужно вернуться к чертежной доске …
UPDATE 2: Ok Проблема решена, я просто прокомментировал «removeNonVisibleItems (dx);» В «onLayout (..)», я думаю, это повредит производительности, но поскольку я использую только очень маленькие списки, это не проблема для меня.
Я в основном использовал этот учебник здесь, в developerlife, и просто заменил ListView на Pauls HorizontalListView и внес изменения, чтобы разрешить «постоянный» выбор (ребенок, который нажал на изменения его внешнего вида, и когда он снова щелкнул его, он меняет его).
Я новичок, поэтому, вероятно, многие уродливые вещи в коде, дайте мне знать, если вам нужно больше деталей.
Галерея – лучшее решение, я попробовал. Я работал над одним почтовым приложением, в котором почта в папке «Входящие» отображается в виде списка, мне нужен горизонтальный вид, я просто конвертировал список в галерею, и все работало нормально, как мне было нужно без ошибок. Для эффекта прокрутки я включил прослушиватель жестов для галереи. Надеюсь, этот ответ поможет вам.
Вы заглянули в компонент ViewFlipper? Может быть, это может вам помочь.
С помощью этого компонента вы можете прикрепить два или более дочерних элемента просмотра. Если вы добавите некоторую трансляционную анимацию и зафиксируете Gesture detection, вы можете иметь красивую горизонтальную прокрутку.
Мое приложение использует ListView в режиме портрета, который просто переключается в Галерею в ландшафтном режиме. Оба они используют один BaseAdapter. Это выглядит как показано ниже.
Источник
Горизонтальный ListView в Android?
Можно ли сделать ListView горизонтально? Я сделал это, используя вид галереи, но выбранный элемент автоматически попадает в центр экрана. Я не хочу, чтобы выбранный элемент находился в том же месте, где я щелкал. Как я могу исправить эту проблему? Моя идея заключалась в том, чтобы установить ListView с горизонтальной прокруткой. Поделитесь своей идеей?
Согласно Android-документации, RecyclerView это новый способ упорядочить элементы в виде списка и отображать их горизонтально.
Преимущества:
- Поскольку с помощью Recyclerview Adapter, шаблон ViewHolder реализуется автоматически
- Анимация проста в исполнении
- Еще много функций
Больше информации о RecyclerView :
Образец:
Просто добавьте блок ниже, чтобы сделать ListView горизонтальный от вертикального
Код-сниппет
Пол не пытается исправлять ошибки в своей библиотеке или принимать исправления пользователей. Вот почему я предлагаю другую библиотеку, которая имеет похожую функциональность:
Обновление : 24 июля 2013 года автор (sephiroth74) выпустил полностью переписанную версию на основе кода Android 4.2.2 ListView. Я должен сказать, что он не имеет всех ошибок, которые были в предыдущей версии, и прекрасно работает!
Ответ @Paul ссылается на отличное решение, но код не позволяет использовать onClickListeners для дочерних элементов (функции обратного вызова никогда не вызываются). Некоторое время я изо всех сил пытался найти решение, и я решил опубликовать здесь то, что вам нужно изменить в этом коде (на случай, если это кому-то понадобится).
Вместо переопределения dispatchTouchEvent переопределения onTouchEvent . Используйте тот же код dispatchTouchEvent и удалите метод (вы можете прочитать разницу между ними здесь http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )
Затем добавьте следующий код, который решит украсть событие у дочерних элементов и передать его нашим onTouchEvent , или позволить им обработать его.
Наконец, не забудьте объявить переменные в вашем классе:
Источник
Horizontal ListView Android Without RecyclerView | Custom Example
Horizontal ListView Android Without RecyclerView is the heart of this example tutorial.
We will create horizontal custom ListView With Image example Using Android studio.
Generally, we create listview in vertical position, but sometimes we need to make it horizontally.
Android provides a method using which you can make horizontal recyclerview easily, but unfortunately, android’s built in system does not provide any method to create horizontal listview.
Here, I have used one class that will convert the position of listview to horizontal instead of vertical.
So let us go through all the steps to accomplish our target.
See the video
Step 1. Adding Attributes
We will add some attributes to support horizontal display.
For this, first create a new xml file in values directory. Keep the name of this file as attrs.xml
You can get reference from the below image to understand the directory structure.
Values->attr.xml
Now copy the following code in attrs.xml
Step 2. Horizontal Class
We need to create one new class named HorizontalListView.java
Write down the below lines in HorizontalListView.java
Above class is very big so I am not writing it here.
For the above class, I have taken reference from this github library.
Visit above to view all the coding lines but you can find this in my source code also which you can download at the end of this tutorial.
Step 3. Images of vehicle
- In this listview, I will show images of various vehicles in the each row.
- So we need to add some images in drawable folder.
Download the images using the below link.
[sociallocker]Download Vehicle images[/sociallocker]
- Save these images in the res->drawable directory.
Step 4. ListView Row Layout
Make a new layout file in res->layout directory.
Set the name of this file as lv_row.xml
Add the below coding lines in lv_row.xml
- I have taken one imageview and one textview. Both these UI widgets are the children of the Linearlayout which has vertical orientation.
- Textview holds the name of the Image of the vehicle.
Step 5. Model For Horizontal ListView
Let us prepare a new java class and give it a name as “Model.java”
Write down the following lines in “Model.java”
- This model class creates proper data structure.
- It holds getter ans setter methods to operate the data in efficient way.
Step 6. Horizontal Adapter
Now it is time to create an adapter class. Make a new java class again.
Name of the the new Java class should be “HorizontalAdapter.java”
Copy and paste the following code snippet in “HorizontalAdapter.java”
- This class will receives an arraylist (objects of Model class) via the second parameter of it’s constructor.
See the below lines which shows the constructor
- As you can see in above code, first parameter is context and second is imageModelArrayList
Now look at the following code of getView() method.
- This method will first inflate the row layout file lv_row.xml which we created in the fourth step.
Step 7. Main Activity Modification
Last thing is to change the main files.
Update the code of activity_main.xml as per the below snippet.
- As you can see in the above code that we have taken instead of just
- This will create a listview from the class HorizontalListView.java (written in second step)
Make the source code for MainActivity.java as a following look
Thoughts on above code
Pay attention at the below code
- First line will simply create an object of HorizontalListView class.
- Second one will give us an object of adapter class.
- Third will create an arraylist with objects of the Model class.
- Fourth will create an integer array (myImageList). This myImageList holds the integer reference of all the images that we have added in the drawable folder.
- Last line will define a string array named myImageNameList which includes the names of the vehicles.
Below line is creating a data
- Here, compiler will use populateData() method.
Code for populateData() method is as the following
Thus, it was all wording about horizontal listview in android studio example.
You can read the below tutorial to make horizontal recyclerview.
Источник