AndroidのLayoutでcompound drawable云々ってワーニングが出る
表題の通り。
This tag and its children can be replaced by one <TextView/> and a compound drawable
ってワーニングが出る。
動作には支障がないけど、五月蝿いったらありゃしない。
というわけで、ワーニングを消してみたんだけど…
とcompound drawableを使う
ワーニングが出る LinearLayoutはこんな感じ。
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <ImageView android:id="@+id/faceImageView" android:contentDescription="@string/face_imageview_desc" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/nameTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/name_textview_label" android:paddingLeft="10dp" /> </LinearLayout>
単純に横方向のリニアレイアウトに絵と文字を並べただけ。
で、ワーニングは「LinearLayout の中の
んじゃ、その TextViewと compound drawableって何?
調べてみたらこんなページを発見。
- How do I use a compound drawable instead of a LinearLayout that contains an ImageView and a TextView
- TextView | Android Developers
で、実際にはこんな感じで書ける。
<TextView android:id="@+id/nameTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/name_textview_label" android:drawableLeft="@drawable/myIcon" android:paddingLeft="10dp" />
のだけど、これだとどんな画像を描くかは xmlファイルの中に "@drawable/myIcon" とかして決めうちしなければならないみたい。
"+id/xxxx" で指定できないのかな?と調べてみたけれど結局わからなかった…。
というわけで、こんな場合は Java のコードの方で描く事になる。
faceImageDrawable.setBounds(0,0,40,40); TextView tv = (TextView)GetResourceById(R.id.nameTextView); tv.setCompoundDrawables(faceImageDrawable, null, null, null);
faceImageDrawableはネットから落としてきたり、データベースから取り出したりした drawable。
サイズをキチンと設定してから TextViewに setCompoundDrawablesで設定する。
これでワーニングの出ていた最初の状態と同じように表示されるようになったのだけど、正直、このやり方の方が面倒な気がする。
というか、自分には最初にぱっと思い付いたワーニングが出てくるやり方の方がわかり易い。
でも、基本的にはプロジェクトのエラーはもちろん、ワーニングも全部消したいんだよな〜。