Как заставить GridView обернуть все его дочерние представления в Kotlin - PullRequest
0 голосов
/ 21 июня 2019

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

[Я хочу, чтобы представление сетки два обернуло все дочерние элементы без показа прокрутки]

Итак, я должен отключить прокрутку GridView, чтобы обернуть его содержимое, или мне не хватает чего-то еще.

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

Это пользовательский класс представлений:

package ...

import ...

class WrappingGridView : GridView {

    constructor(context: Context) : super(context) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {}

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        var heightSpec = heightMeasureSpec
        if (layoutParams.height == LayoutParams.WRAP_CONTENT) {
            heightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE shr 2, MeasureSpec.AT_MOST)
        }
        super.onMeasure(widthMeasureSpec, heightSpec)
    }

}

Итак, я хочу знать, как я могу обернуть дочерние представления в gridView?Кроме того, я должен использовать GridView, GridLayout или что-то еще?

ОБНОВЛЕННЫЕ КОДЫ ПОСЛЕ ПРОСМОТРА ВИДЕО РЕЙСИКЕРА:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              tools:context=".ShopFragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:background="@android:color/white">

    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical"
                  android:layout_marginTop="5dp">

        <TextView android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:textSize="20sp"
                  android:padding="2dp"
                  android:layout_marginLeft="5dp"
                  android:layout_marginStart="5dp"
                  style="@style/TextAppearance.AppCompat.Title"
                  android:text="Trending Tastes"
                  android:textColor="@color/colorPrimaryDark"
                  android:drawableLeft="@drawable/ic_whatshot_gradient_900_24dp"
                  android:drawableStart="@drawable/ic_whatshot_gradient_900_24dp"
                  android:drawablePadding="5dp"/>

        <HorizontalScrollView android:layout_width="match_parent"
                              android:scrollbars="none"
                              android:id="@+id/circularCardCollection"
                              android:layout_height="wrap_content">

            <LinearLayout android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:orientation="horizontal">
                <include layout="@layout/card_small_layout"/>
                <include layout="@layout/card_small_layout"/>
                <include layout="@layout/card_small_layout"/>
                <include layout="@layout/card_small_layout"/>
            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:orientation="vertical">
        <TextView android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:textSize="20sp"
                  android:padding="2dp"
                  android:layout_marginLeft="5dp"
                  android:layout_marginStart="5dp"
                  style="@style/TextAppearance.AppCompat.Title"
                  android:text=" @Treat -Must Try"
                  android:textColor="@color/colorPrimaryDark"
                  android:drawableLeft="@drawable/ic_restaurant_gradient_24dp"
                  android:drawableStart="@drawable/ic_restaurant_gradient_24dp"
                  android:drawablePadding="5dp"/>
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content">
    <android.support.v7.widget.RecyclerView android:layout_width="match_parent"
                                            android:layout_height="wrap_content"
                                            android:padding="10dp"
                                            android:horizontalSpacing="5dp"
                                            android:verticalSpacing="10dp"
                                            android:gravity="center"
                                            android:id="@+id/grid"/>
</RelativeLayout>


    </LinearLayout>
</LinearLayout>

В основном фрагменте:

   gridview.layoutManager = GridLayoutManager(view.context,2,LinearLayoutManager.VERTICAL,false)

Это не решает проблему.Я посмотрел на решения Stack Question Но все равно никакого результата.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Я решил проблему. Вид сетки не смог обернуть своего дочернего элемента, потому что макет не имеет ScrollView.

Я пришел из фона веб-дизайна, и основным свойством веб-страницы является прокрутка в соответствии с ее содержимым, но в Android мы должны добавить ScrollView, чтобы сделать Свиток активности.

Просто добавили ScrollView как самый верхний элемент, и он работал как шарм!

<ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              tools:context=".ShopFragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
        //Other Views

<GridView  android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
</ScrollView>

Кроме того, RecyclerView является обновленной версией GridView, поэтому его лучше использовать.

0 голосов
/ 21 июня 2019

Вы можете попробовать эту библиотеку: FitGridView

В противном случае вы можете использовать Gridlayout или комбинацию LinearLayout, но вам нужно много вычислений, в зависимости от минимального и максимального размера картыВы хотите, количество карт по строке и строке.

...