2013-07-21 4 views
3

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

ответ

2

Попробуйте этот код:

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); 
1

Это добавляет Лео ответ. Если вы хотите указать состояние, которое является ложным, например, отключенной кнопкой, не существует состояния - android.R.attr.state_disabled, поэтому вы можете сделать ссылку ресурса отрицательной (добавить «-» до):

state.addState (новый int [] {android.R.attr.state_checked, -android.R.attr.state_enabled}, ...);

Смежные вопросы