Как иметь горизонтальный список?

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

Я попытался поместить gridview внутри горизонтального прокрутки и установить число столбцов gridview для количества изображений. Но этот подход не помогает.

Пожалуйста, предложите что-нибудь?

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:background="@android:color/white" android:clickable="true"
>

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"
    android:layout_margin="1dp"
    android:fillViewport="false"
    android:layout_below="@+id/tvHis">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    <GridView


        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listViewHis"
        android:layout_below="@+id/tvHisPosts"



        />
    </LinearLayout>
</HorizontalScrollView>

</LinearLayout>

Ответ 1

Я, наконец, достиг этого без использования какой-либо библиотеки, посмотрите на это:

Я получил json responce как это:

{"searchInfo":{"status":"1","message":"Success","clist":[{"id":"1de57434-795e-49ac-0ca3-5614dacecbd4","name":"Theater","image_url":"http://52.25.198.71/miisecretory/category_images/movie.png"},{"id":"62fe1c92-2192-2ebb-7e92-5614dacad69b","name":"CNG","image_url":"http://52.25.198.71/miisecretory/category_images/cng.png"},{"id":"8060094c-df4f-5290-7983-5614dad31677","name":"Wine-shop","image_url":"http://52.25.198.71/miisecretory/category_images/beer.png"},{"id":"888a90c4-a6b0-c2e2-6b3c-561788e973f6","name":"Chemist","image_url":"http://52.25.198.71/miisecretory/category_images/chemist.png"},{"id":"a39b4ec1-943f-b800-a671-561789a57871","name":"Food","image_url":"http://52.25.198.71/miisecretory/category_images/food.png"},{"id":"c644cc53-2fce-8cbe-0715-5614da9c765f","name":"College","image_url":"http://52.25.198.71/miisecretory/category_images/college.png"},{"id":"c71e8757-072b-1bf4-5b25-5614d980ef15","name":"Hospital","image_url":"http://52.25.198.71/miisecretory/category_images/hospital.png"},{"id":"db835491-d1d2-5467-a1a1-5614d9963c94","name":"Petrol-Pumps","image_url":"http://52.25.198.71/miisecretory/category_images/petrol.png"},{"id":"f13100ca-4052-c0f4-863a-5614d9631afb","name":"ATM","image_url":"http://52.25.198.71/miisecretory/category_images/atm.png"}]}}

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="5">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" />


    <HorizontalScrollView
        android:id="@+id/horizontalScroll"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">


        </LinearLayout>


    </HorizontalScrollView>
</LinearLayout>

теперь согласно json-ответу, который состоит из json-массива, я сделал это:

for (int v = 0; v < collectionInfo.size(); v++) {
                /*---------------Creating frame layout----------------------*/

                FrameLayout frameLayout = new FrameLayout(ActivityMap.this);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, getPixelsToDP(90));
                layoutParams.rightMargin = getPixelsToDP(10);
                frameLayout.setLayoutParams(layoutParams);

                /*--------------end of frame layout----------------------------*/

                /*---------------Creating image view----------------------*/
                final ImageView imgView = new ImageView(ActivityMap.this); //create imageview dynamically
                LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                imgView.setImageBitmap(collectionInfo.get(v).getCatImage());
                imgView.setLayoutParams(lpImage);
                // setting ID to retrieve at later time (same as its position)
                imgView.setId(v);
                imgView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
//                        long id = imgView.getId();
                        // getting id which is same as its position
                        Log.i(TAG, "Clicked on " + collectionInfo.get(v.getId()).getCatName());
                        // getting selected category data list
                        new GetSelectedCategoryData().execute(collectionInfo.get(v.getId()).getCatID());
                    }
                });
                /*--------------end of image view----------------------------*/

                /*---------------Creating Text view----------------------*/
                TextView textView = new TextView(ActivityMap.this);//create textview dynamically
                textView.setText(collectionInfo.get(v).getCatName());
                FrameLayout.LayoutParams lpText = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER);
                // Note: LinearLayout.LayoutParams  gravity was not working so I putted Framelayout as 3 paramater is gravity itself
                //lpText.gravity = Gravity.BOTTOM | Gravity.CENTER;
                textView.setTextColor(Color.parseColor("#43A047"));
                textView.setLayoutParams(lpText);
                /*--------------end of Text view----------------------------*/

                //Adding views at appropriate places
                frameLayout.addView(imgView);
                frameLayout.addView(textView);
                linearLayout.addView(frameLayout);

            }

трюк, который работает здесь, - это идентификатор, который я присвоил ImageView "imgView.setId(v)", и после этого, применяя onClickListener к этому, я снова извлекаю идентификатор представления....

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

Ответ 2

Я предлагаю вам использовать RecycleView для его достижения. Я думаю, что это простой способ. Взгляните на этот пост, чтобы изменить ориентацию RecycleView на горизонтальный
И как сделать RecycleView: следовать этому руководству
Надеемся на эту помощь.