1

SetButtonDrawableAndroidアプリケーションでは、xmlファイルを使用してチェックボックスの背景色を変更できることがわかっています。

このxmlファイルは、グラデーションまたはドローアブルの画像を使用した単純なファイルで定義できます。この記事では、グラデーションのサンプルを示します:Android:チェックボックスの色を設定します

また、これは私が使用した別のサンプルです:

 <item android:state_checked="true">
    <layer-list>
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />

            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/tick_red_icon"/>
        </item>
    </layer-list>
</item>
<item >
    <layer-list>
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />
            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="2dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <solid android:color="#e5e4e4" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
    </layer-list>
</item>

DrawableGradientまた、グラデーションの色を変更したい場合は、実行時にそれを定義してから、これを使用する必要があることもわかっています。

DrawableGradient問題はこれです:実行時に色を変更する機能を持つように、上記のようないくつかの複雑なグラデーションをどのように定義できますか?

または、悪い解決策がある場合、チェックボックスの背景色を設定し、実行時にそれらの色を変更できるより良い解決策はありますか?

4

1 に答える 1

0

最後に調査によってこの記事を見つけ、これに基づいてこの質問の答えとなるコードを開発しました。

次のように、各レイヤーを個別のxmlファイルで定義する必要があります。

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />

            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp" android:id="@+id/mainImage">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp" android:id="@+id/TheinImage">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/ic_menu_ca_dis"/>
        </item>
    </layer-list>

次に、実行時にそれらを取得することで、それらのアイテムを変更できます(レイヤーは私のxmlファイルの名前です)

GradientDrawable gd = new GradientDrawable
            (GradientDrawable .Orientation .TopBottom,
             new int[]{Color.Red , Color.Green });
        gd.SetStroke (10, Color.Blue );
LayerDrawable ld = (LayerDrawable) Resources .GetDrawable  (Resource .Drawable.Layer   );
        bool testfactor = ld.SetDrawableByLayerId (Resource .Id.mainImage , gd);

これで、を使用して、StateListDrawable魔女の状態が魔女のレイヤーに関連していることを定義できます。

    StateListDrawable states = new StateListDrawable();
        states.AddState (new int[] {Android .Resource .Attribute .StateChecked },
        ld);
        states.AddState(new int[] { },
        Resources .GetDrawable (Resource .Drawable .ic_menu_ca_dis   ) );

これで、実行時にこのxmlの変更に参加できます:)

于 2013-01-27T16:48:11.667 に答える