Я разрабатываю основное приложение для рисования в андроиде, и я не могу программно установить пользовательские чертежи для своих переключателей. Эти переключатели состоят из 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
. Заранее благодарю за любую помощь!