動的なサイズ変更について相談したいです。
現在Androidでアプリを制作しています。データベースに保存してある文字列などのデータを、リサイクラービューの中のカードビューに流し込んで表示するといったアプリを制作しています。
カードビューの構成は以下のようになっています。
XML
1<androidx.cardview.widget.CardView 2 android:id="@+id/cardview" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 app:cardCornerRadius="12dp" 6 android:foreground="?android:attr/selectableItemBackground" 7 android:layout_marginHorizontal="5dp"> 8 <LinearLayout 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" 11 android:weightSum="5" 12 android:orientation="vertical"> 13 <TextView 14 fontPath="font/NotoSansJP-Bold.otf" 15 android:id="@+id/textview1" 16 android:layout_weight="1" 17 android:layout_width="match_parent" 18 android:layout_height="match_parent" 19 android:textSize="20sp" 20 android:layout_marginStart="5dp" 21 tools:ignore="MissingPrefix" /> 22 <LinearLayout 23 android:layout_width="match_parent" 24 android:layout_height="match_parent" 25 android:orientation="vertical" 26 android:layout_weight="3" > 27 <ImageView 28 android:id="@+id/imageview" 29 android:adjustViewBounds="true" 30 android:layout_width="match_parent" 31 android:layout_height="match_parent" 32 android:maxWidth="220dp" 33 android:maxHeight="130dp" 34 android:contentDescription="画像データ" 35 tools:ignore="HardcodedText" /> 36 </LinearLayout> 37 <TextView 38 fontPath="font/NotoSansJP-Regular.otf" 39 android:id="@+id/textview2" 40 android:layout_weight="1" 41 android:layout_width="match_parent" 42 android:layout_height="match_parent" 43 android:gravity="end" 44 android:textSize="20sp" 45 android:layout_marginEnd="5dp" 46 tools:ignore="MissingPrefix" /> 47 </LinearLayout> 48 </androidx.cardview.widget.CardView>
これをビューホルダーに設定し、アダプターでデータとビューの紐づけを行っています。
そしてこのtextview1なのですが、データによってはやや長い文字列が入ることも有り、そうするとカードビューの大きさが不揃いになるということが起きてしまうのです。
その対策として、textview1が二行になったら(文字列が折り返されて表示されたら)文字サイズを小さくして、なんとかカードビューの大きさをそろえたいと考えております。
現在、そのために以下のようにコードを書いてあります。
Kotlin
1 2override fun onBindViewHolder(holder: MenuListViewHolder, position: Int) { 3 val data = datalist[position] 4 5 holder.textview1.text = data["text1"] as String 6 val line = holder.textview1.layout.lineCount 7 if (line > 1) { 8 holder.textview1.textSize = 16f 9 } 10} 11
このように書いたところ、以下のようなエラーが出てきました。
java.lang.IllegalStateException: holder.textview1.layout must not be null
アダプターの外などからonCreate()の中などで、リサイクラービューのアイテムの見た目を操作することはできるでしょうか。何か方法などを知っている方がいらしたら、ご教示、宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー