Horizontal listview android studio

Implementing a Horizontal ListView Guide

One common challenge on Android that often arises is the need to create a horizontal ListView that works like a regular ListView but scrolls horizontally instead. This is common for news, images, etc.

Unfortunately, there is no «canonical» officially supported solution for this. Instead all we have is a series of half-baked unfinished libraries. This can make developing Horizontal ListView more challenging than you would initially suspect.

This guide is a step-by-step walkthrough of implementing a Horizontal ListView using the available third-party libraries.

Of all the third-party libraries currently out there for Horizontal ListView, the most complete and useable is called TwoWayView. Even though there is a warning about this not being production ready, this is still probably the best view short of implementing one yourself.

Download TwoWayView as a ZIP and then install it as a library project. Note: If you have any trouble importing the version downloaded, try this modified version compatible with Eclipse.

First, let’s add a style indicating the orientation of the ListView (horizontal or vertical) in res/values/styles.xml :

In your Layout XML, use the following code to add the TwoWayView:

Now we can populate data into the TwoWayView much like any ListView as described in the Adapter guide. For example, we might create a very simple array of items:

and then construct a super simple ArrayAdapter and populate the TwoWayView with:

Take into account that the layout_width param is defined as match_parent in simple_list_item_1 , so if you use it, the list will show just the first element. So, please create a new layout like this:

Name it as simple_list_item_1 and use the following code to test it: The view will now present the items horizontally like:

Here we have implemented a simple Horizontal ListView using a popular third-party library. Obviously this example is very simple but you can follow the steps in the the Adapter guide to create arbitrarily complex list items.

Источник

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.

Источник

Горизонтальный ListView в Android?

Можно ли сделать ListView горизонтально? Я сделал это с помощью просмотра галереи, но выбранный элемент автоматически попадает в центр экрана. Я не хочу, чтобы выбранный элемент находился в том же месте, на котором я нажал. Как я могу устранить эту проблему? Моя идея состояла в том, чтобы установить ListView с помощью горизонтального прокрутки. Поделитесь идеей?

Читайте также:  Анимация переходов между фрагментами android

ОТВЕТЫ

Ответ 1

В соответствии с документацией на Android RecyclerView — это новый способ упорядочить элементы в списке и отображать горизонтально

  • Поскольку с помощью адаптера Recyclerview шаблон ViewHolder является автоматически реализовано
  • Анимация легко выполнить
  • Много других функций

Дополнительная информация о RecyclerView :

Пример:

Просто добавьте нижний блок, чтобы сделать ListView горизонтальным по вертикали

Code-фрагмент

Ответ 2

Пол не потрудился исправить ошибки своей библиотеки или принять исправления пользователей. Поэтому я предлагаю другую библиотеку, которая имеет аналогичную функциональность:

Обновление: автор 24 июля 2013 года (sephiroth74) выпустил полностью переписанную версию на основе кода android 4.2.2 ListView. Я должен сказать, что у него нет всех ошибок, которые имела предыдущая версия, и отлично работает!

Ответ 3

@Paul ответьте на большое решение, но код не позволяет использовать onClickListeners для элементов children (функции обратного вызова никогда не вызывают). Я некоторое время пытался найти решение, и я решил опубликовать здесь, что вам нужно изменить в этом коде (на случай, если кому-то это понадобится).

Вместо переопределения dispatchTouchEvent переопределить onTouchEvent . Используйте тот же код dispatchTouchEvent и удалите метод (вы можете прочитать разницу между двумя здесь http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers)

Затем добавьте следующий код, который решит украсть событие у детей элемента и передать его нашему onTouchEvent , или пусть он будет обрабатываться ими.

Наконец, не забудьте объявить переменные в вашем классе:

Ответ 4

Поскольку Google представил Android Support Library v7 21.0.0, вы можете использовать RecyclerView для прокрутки элементов по горизонтали. Виджет RecyclerView представляет собой более продвинутую и гибкую версию ListView.

Чтобы использовать RecyclerView, просто добавьте зависимость:

Дополнительная информация о RecyclerView:

Ответ 5

Это немного (очень) поздно, но я отправляю это на случай, если кто-то придет позже.

Библиотека поддержки с предварительного просмотра Android L имеет RecyclerView , который делает именно то, что вы хотите.

Прямо сейчас вы можете получить его только через предварительный просмотр LK, и вам нужно установить minSdk на L . Но вы можете скопировать все необходимые файлы в свой проект и использовать их таким образом, пока L официально не будет.

Вы можете загрузить предварительные документы здесь.

Предупреждение. API для просмотра ресайклеров может измениться, и у него могут быть ошибки.

Обновление

Исходный код для горизонтального списка:

Ответ 6

Загрузите файл jar из здесь

теперь помещаем его в папку libs, щелкните его правой кнопкой мыши и выберите «Добавить как библиотеку»

теперь в main.xml поместите этот код

теперь в классе Activity, если вы хотите, чтобы Horizontal Listview с изображениями помещал этот код

Ответ 7

На самом деле это очень просто: просто поверните представление списка, чтобы лежать на боку

Затем при раздувании детей это должно быть внутри метода getView. вы вращаете детей, чтобы встать прямо:

Edit: если ваш ListView не подходит должным образом после вращения, поместите ListView внутри этого RotateLayout следующим образом:

Ответ 8

Мое решение — просто использовать виджет ViewPager . Он не имеет централизованной блокировки как Gallery и имеет встроенные функции для просмотра видов (как ListView ). Подобный подход можно использовать в приложении Google Play, когда вы имеете дело с горизонтально прокручиваемыми списками.

Вам просто нужно расширить PagerAdapter и выполнить пару настроек:

В результате у вас будет виджет с прокруткой по горизонтали с адаптером, например:

Ответ 9

Примечание. Android теперь поддерживает горизонтальные представления списка с использованием RecyclerView, поэтому теперь этот ответ не рекомендуется для получения информации о RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView

Я разработал логику, чтобы сделать это без использования какой-либо внешней библиотеки горизонтальной прокрутки, вот горизонтальное представление, которое я достиг, и я разместил свой ответ здесь: fooobar.com/questions/34044/.

Читайте также:  D back android xiaomi

Мой JSON ответ таков:

уловка, которая работает здесь, является идентификатором, который я назначил ImageView «imgView.setId(v)», и после этого применяя onClickListener к этому, я снова выбираю идентификатор представления. Я также прокомментировал внутри кода так что это легко понять, я надеюсь, что это может быть очень полезно. Happy Coding. 🙂

Ответ 10

Вы можете использовать RecyclerView в библиотеке поддержки. RecyclerView — это обобщенная версия ListView, которая поддерживает:

  • Менеджер компоновки для позиционирования элементов
  • По умолчанию анимации для обычных операции с элементами

Ответ 11

Это не очень ответ, но как насчет использования Горизонтальный просмотр прокрутки?

Ответ 12

Я много искал решение этой проблемы. Короткий ответ: нет хорошего решения, без переопределения частных методов и тому подобного. Лучшее, что я нашел, это реализовать его с нуля, расширив AdapterView . Это довольно жалко. См. Мой вопрос о горизонтальных списках ListViews.

Ответ 13

Мне пришлось сделать то же самое для одного из моих проектов, и я тоже написал свою собственную. Я назвал его HorzListView теперь является частью моей открытой библиотеки Aniqroid.

http://aniqroid.sileria.com/doc/api/ (Посмотрите на загрузки внизу или используйте проект кода Google, чтобы увидеть дополнительные параметры загрузки: http://code.google.com/p/aniqroid/downloads/list)

Ответ 14

Для моего приложения я использую HorizontalScrollView, содержащий LinearLayout внутри, который имеет ориентацию, установленную в горизонтальную. Чтобы добавить изображения внутри, я создаю ImageViews внутри действия и добавляю их в свой LinearLayout. Например:

Это работает отлично для меня. В этой операции все, что мне нужно сделать, это что-то вроде кода ниже:

Как я уже сказал, это работает для меня, и я надеюсь, что это поможет кому-то тоже добиться этого.

Ответ 15

хорошо, вы всегда можете создавать свои текстовые изображения и т.д. динамически и устанавливать свои onclicklisteners, как вы бы сделали с адаптером

Ответ 16

HorizontialListView не может работать, когда данные в адаптере участвуют в другом потоке. Все работает на 100% в потоке пользовательского интерфейса. Это большая проблема в многопоточном режиме. Я думаю, что использование HorizontialListView — не лучшее решение для вашей проблемы. Хороший способ — это лучший способ. Вы просто замените свою предыдущую галерею HorzListView. Вам не нужно изменять код об адаптере. Затем все идет так, как вы надеетесь. Посмотрите fooobar.com/questions/34033/. о HorzListView.

Ответ 17

Я использовал горизонтальную ссылку списка в моем проекте, и я получил хорошие результаты. Сначала я был использован devsmart, но это дало мне некоторые проблемы. Поэтому лучший способ использовать горизонтальную ссылку списка, поскольку он восстановил мои проблемы, а также недавно запустил приложение в Google PlayStore с помощью этой библиотеки и получил хороший ответ от пользователи. Поэтому я рекомендую вам использовать ту же библиотеку, о которой я говорил выше, для отображения listview по горизонтали. Наслаждайтесь:)

Ответ 18

Для этого есть большая библиотека, называемая TwoWayView, ее очень просто реализовать, просто включите библиотеку проекта в рабочее пространство и добавьте его как проект библиотеки в свой первоначальный проект, а затем выполните следующие шаги, которые изначально относятся здесь:

Сначала добавьте стиль, указывающий ориентацию ListView (горизонтальный или вертикальный) в (res/values ​​/styles.xml):

В XML-формате Layout используйте следующий код для добавления TwoWayView:

и, наконец, просто объявите его и обработайте его как любой обычный ListView :

Все методы ListView будут работать здесь как обычно, но есть только одна разница, которую я заметил, а именно при настройке режима выбора метод setChoiceMode не принимает значение int , а значение из enum называется ChoiceMode , поэтому list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE); будет lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE .

Ответ 19

Вы можете использовать ViewFlipper для включения макета XML и добавления изображений, списка для каждого макета XML

Источник

Оцените статью