3

Android で基本的なペイント アプリケーションを開発していますが、ラジオ ボタンのカスタム ドローアブルをプログラムで設定できないようです。これらのラジオ ボタンは、境界線LayerDrawableが白ColorDrawableで、中央が黄色 (または任意の色)ColorDrawableで構成されています。機能を維持するために、これLayerDrawableを別のもの (選択を示す黒い境界線があります) と一緒に配置します。StateListDrawableRadioButton

しかし、試してみるとsetButtonDrawable(myDrawable)RadioButton幅と高さを に指定したにもかかわらず、 は非常に小さな領域を占めます30dp

そして、試してみるsetButtonDrawable(null)setBackground(myDrawable)RadioButton機能がなくなりました。

これが私のコードです

private void setupColorButtons() {
    int[] colors = {Color.RED, Color.GREEN, Color.BLUE,
                    Color.YELLOW, Color.CYAN, Color.MAGENTA};
    int childCount = mColorGroup.getChildCount();
    for (int i = 0; i < childCount; i++) {
        RadioButton colorButton = (RadioButton) mColorGroup.getChildAt(i);
        colorButton.setButtonDrawable(createColorButtonDrawable(colors[i]));
    }
}

private Drawable createColorButtonDrawable(int color) {
    ColorDrawable center = new ColorDrawable(color);
    ColorDrawable selBorder = new ColorDrawable(R.color.black);
    ColorDrawable unselBorder = new ColorDrawable(R.color.white);

    LayerDrawable sel = new LayerDrawable(new Drawable[] {selBorder, center});
    sel.setLayerInset(1, 2, 2, 2, 2);
    LayerDrawable unsel = new LayerDrawable(new Drawable[] {unselBorder, center});
    unsel.setLayerInset(1, 2, 2, 2, 2);

    StateListDrawable states = new StateListDrawable();
    states.addState(new int[] {android.R.attr.state_checked}, sel);
    states.addState(new int[] {-android.R.attr.state_checked}, unsel); 
    return states;
}

私はすでに同様の質問を見てきましたが、すべてのソリューションでカスタム xml スタイルを作成する必要があります。プログラムでカスタムを設定する方法を誰かが知っているかどうか疑問に思っていStateListDrawableます。助けてくれてありがとう!

4

2 に答える 2

3

このコードを試してください:

StateListDrawable mState1 = new StateListDrawable();
mState1.addState(new int[] { android.R.attr.state_pressed },
    getResources().getDrawable(R.drawable.button3_pressed));
mState1.addState(new int[] { android.R.attr.state_focused },
    getResources().getDrawable(R.drawable.button3_focused));
mState1.addState(new int[] {},
    getResources().getDrawable(R.drawable.button3_up));
myButton.setBackgroundDrawable(mState1);
于 2013-07-25T20:32:59.633 に答える
1

これはレオの答えに追加されます。無効なボタンなど、false の状態を指定する場合、状態はありません - android.R.attr.state_disabled であるため、リソース参照を負にすることができます (前に「-」を追加します)。

state.addState(new int[]{android.R.attr.state_checked, -android.R.attr.state_enabled },...);

于 2015-05-26T11:53:49.297 に答える