TextViews внутри GridLayout обрезаются с правой стороны Android - PullRequest
0 голосов
/ 25 апреля 2020

У меня GridLayout вот так

<com.google.android.material.card.MaterialCardView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:elevation="2dp"
                    app:cardCornerRadius="2dp">

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

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="10dp"
                            android:layout_marginTop="10dp"
                            android:layout_marginRight="10dp"
                            android:text="Famous People"
                            android:textSize="17sp"
                            android:textStyle="bold" />

                        <GridLayout
                            android:id="@+id/llFamousPeople"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:columnCount="3"
                            android:alignmentMode="alignBounds"
                            android:layout_marginRight="5dp"
                            android:layout_marginLeft="5dp"
                            android:orientation="horizontal"
                            android:textSize="17sp" />
                    </LinearLayout>
                </com.google.android.material.card.MaterialCardView>

Я устанавливаю значения внутри GridLayout программно вот так

extra?.famous_people?.forEach {
            val textView = TextView(this)
            val gridparams = GridLayout.LayoutParams()
            gridparams.apply {
                height = GridLayout.LayoutParams.WRAP_CONTENT
                width = GridLayout.LayoutParams.WRAP_CONTENT
            }
            textView.layoutParams = gridparams
            val marginParams = textView.layoutParams as ViewGroup.MarginLayoutParams
            marginParams.bottomMargin = 10
            marginParams.topMargin = 10
            marginParams.leftMargin = 10
            marginParams.rightMargin = 10
            textView.setPadding(5, 5, 5, 5)
            textView.text = it
            llFamousPeople.addView(textView)
        }

И результирующий вид выглядит так enter image description here

Имена в 3-м столбце обрезаются. Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Можете ли вы попробовать переработчик? GridLayoutManager

 <com.google.android.material.card.MaterialCardView    
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:elevation="2dp"
                    app:cardCornerRadius="2dp">

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

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="10dp"
                            android:layout_marginTop="10dp"
                            android:layout_marginRight="10dp"
                            android:text="Famous People"
                            android:textSize="17sp"
                            android:textStyle="bold" />

                       <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/rc_txt_view"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                       app:spanCount="3"

           />
                    </LinearLayout>
                </com.google.android.material.card.MaterialCardView>l̥
0 голосов
/ 25 апреля 2020

Таким образом, есть способы решить эту проблему.

First

Сделать 2 столбца в Gridlayout. Он освободит достаточно места для всех имен. android: columnCount = "3"

Second Сделать текст 2 лайнера и установить его гравитацию в центре. Если вы сделаете minLine 1 и maxLine 2, все тексты не будут выровнены, поэтому сделайте minline 2 и maxline 2, чтобы все тексты покрывали пространство, равное двум строкам.

              <TextView                         
                android:minLines="2"
                android:maxLines="2"/>

Third

Использование Recyclerview с подходом GridLayoutManager

...