Drawable ResourcesのShapeをJavaで動的に作る方法がわからない
たとえば、
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="<color>" /> <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" /> </shape>
<TextView android:id="@+id/set_shape" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/shape" />
などとするときに、TextViewの背景色(solidタグのcolor属性)を状況によって変えたい場合。
Colorについては<color name="red">#ff0000</color>とかで複数用意すればいいんだけど、その用意したColor Resourcesをsolidに適用する方法がわからない。上のXMLでTextViewにsetBackgroundColorは試してみたけど、shapeの指定を上書きしてしまってcornersの指定がなかった事にされてしまう。
http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape
Shapeと関わりがあるっぽいクラスにShapeDrawableクラスというものがあるんだけど、solidを動的に指定できそうなメソッドは見当たらない…。ついでに言うとcorners指定のメソッドもない?
Resources r = getResources();
TextView tv = (TextView) findViewById(R.id.set_shape);
ShapeDrawable sd = (ShapeDrawable) r.getDrawable(R.drawable.shape);
sd.setSolidColor(r.getColor(R.color.red)); //こういうメソッドがあってほしかった
tv.setBackgroundDrawable(sd)
みたいに出来たら一番ベストなんだけれど。setShapeとかPaintとかで色を持ってくるのかなあ。