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