Ответ 1
Понимание того, как работают стили Android, может быть немного беспорядочным.
Я попытаюсь объяснить, каким будет основной поток работы на основе примера.
Предположим, вы хотите знать, что такое фон по умолчанию для кнопок. Это может быть либо простой цвет (маловероятный), либо выталкиваемый (существует много разных типов чертежей).
Android имеет темы. Тема в основном определяет, какой стиль применяется к виджетам. Поэтому наш первый шаг - найти тему Android по умолчанию.
Вы найдете его под android-sdk\platforms\android-15\data\res\values\themes.xml
В этом файле темы найдите button
.
Вы найдете что-то вроде этого:
<!-- Button styles -->
<item name="buttonStyle">@android:style/Widget.Button</item>
Это означает, что тема применяет стиль Widget.Button
к кнопкам.
Хорошо, теперь найдем стиль Widget.Button
.
Все стиль Android по умолчанию определяется в файле android-sdk\platforms\android-15\data\res\values\styles.xml
Теперь найдите Widget.Button
Вы найдете что-то вроде этого:
<style name="Widget.Button">
<item name="android:background">@android:drawable/btn_default</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
<item name="android:textColor">@android:color/primary_text_light</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
Интересная строка:
<item name="android:background">@android:drawable/btn_default</item>
Это означает, что в качестве фона кнопки есть выделение, называемое btn_default
.
Теперь нам нужно найти файл с именем btn_default.*
в одной из доступных папок под android-sdk\platforms\android-15\data\res
.
Это может быть либо изображение (очень маловероятно), либо файл xml, например btn_default.xml
.
После небольшого поиска вы найдете файл android-sdk\platforms\android-15\data\res\drawable\btn_default.xml
Он содержит что-то вроде этого:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true" android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true" android:drawable="@drawable/btn_default_normal_disable_focused" />
<item android:drawable="@drawable/btn_default_normal_disable" />
</selector>
Теперь вам нужно понять, что это селекторный drawable (один из многих типов с возможностью рисования). Этот селектор выбирает разные фоны, основываясь на состоянии кнопок. Например, если кнопки нажаты, у него есть другой фон.
Не смотря на состояние по умолчанию.
<item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" />
Он применяет drawable с именем btn_default_normal
.
Теперь нам нужно найти этот drawable.
Опять же, нам нужно найти файл с именем btn_default_normal.*
в одной из выпадающих папок под android-sdk\platforms\android-15\data\res
.
Это может быть либо изображение, либо xml файл, например btn_default_normal.xml
.
Вы найдете несколько файлов под названием "btn_default_normal.9.png" в разных папках с возможностью рисования для разных разрешений.
:) Теперь вы знаете, что btn_default_normal.9.png
установлен как фон кнопки.