web-dev-qa-db-ja.com

プログラムでレイヤーリスト内の形状の色を変更する

selectable_kachel_shapeの色をプログラムで変更しようとしています。 xmlファイルは次のとおりです。

kachel_ticked_style.xml

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >


    <item>
        <shape
            Android:id="@+id/selectable_kachel_shape"
            Android:shape="rectangle" >
            <stroke
                Android:width="5dp"
                Android:color="@color/headrbar_color" />
        </shape>
    </item>
    <item>
        <rotate
            Android:fromDegrees="45"
            Android:pivotX="120%"
            Android:pivotY="100%"
            Android:toDegrees="45" >
            <shape Android:shape="line" >
                <stroke
                    Android:width="40dp"
                    Android:color="@color/headrbar_color" />
            </shape>
        </rotate>
    </item>
    <item
        Android:right="5dp"
        Android:top="5dp">
        <bitmap
            Android:gravity="top|right"
            Android:src="@drawable/selectable_tiles_check" />
    </item>

</layer-list>

フラグメント内で次のコードを呼び出しています

LayerDrawable layers = (LayerDrawable)  this.getActivity().getResources().getDrawable(R.drawable.kachel_ticked_style);

GradientDrawable shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.selectable_kachel_shape));
                       shape.setColor(this.getActivity().getResources().getColor(Android.R.color.background_dark);

1. shape.setColorでNullPointerExceptionが発生するのはなぜですか?

2.プログラムで、図形内、つまりレイヤーリスト内の色を変更するにはどうすればよいですか?

18
Stam

答えが見つかりました。図形ではなく、アイテム内に図形のIDを入力する必要がありましたkachel_ticked_style.xml

<item 
    Android:id="@+id/selectable_kachel_shape">
        <shape
             Android:shape="rectangle" >
            <stroke
                Android:width="5dp"
                Android:color="@color/headrbar_color" />
        </shape>
    </item>

次に、shape.setColorを呼び出す形状の色、またはshape.setStroke(strokeWidth、strokeColor)を呼び出すストロークの色のいずれかを変更できます。

24
Stam