Как CheckBox получает соответствующие списки? - PullRequest
2 голосов
/ 12 января 2011

Класс CheckBox расширяет CompoundButton, но ничего не добавляет к нему. Но кое-как, как это получает его соответствующий взгляд. Я нашел некоторые объявления в источниках Android, но интересно, как они отображаются в класс CheckBox?

public class CheckBox extends CompoundButton {
    public CheckBox(Context context) {
        this(context, null);
    }

    public CheckBox(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.checkboxStyle);
    }

    public CheckBox(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
}

Стили

<style name="Theme">
    <item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>
</style>

<style name="Widget.CompoundButton.CheckBox">
    <item name="android:background">@android:drawable/btn_check_label_background</item>
    <item name="android:button">@android:drawable/btn_check</item>
</style>

EDIT:

Наверное, мне было непонятно ... Я понимаю, как рисование назначается стилю Widget.CompoundButton.CheckBox, но как этот стиль назначается классу CheckBox? Я вижу ".CheckBox" в названии стиля, но действительно ли это соглашение об именах делает этот трюк? Если да, то каковы правила? Если я получу MyCheckBox от CompoundButton, могу ли я просто определить стиль Widget.CompoundButton.MyCheckBox, и он будет работать?

Ответы [ 2 ]

4 голосов
/ 12 января 2011

Вот ваш ответ: <item name="android:button">@android:drawable/btn_check</item>

У рисования может быть несколько состояний (независимо от того, находится ли элемент в фокусе, нажат и т. Д.), И именно здесь находятся различные состояния флажка.

РЕДАКТИРОВАТЬ: После того, как вы пересмотрели свой вопрос, я вижу, что вы ищете что-то другое. Опять же, это все, что вы опубликовали:

<style name="Widget.CompoundButton.CheckBox">

Это стиль.

<item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>

Основная тема (android.internal.R.attr) имеет атрибут "checkboxStyle", который указывает на этот стиль.

public CheckBox(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.checkboxStyle);
}

Конструктор назначает этот атрибут представлению. И это все.

1 голос
/ 12 января 2011

Прямо здесь

<item name="android:button">@android:drawable/btn_check</item>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...