web-dev-qa-db-ja.com

Android-デフォルトのボタンスタイル

質問:色の16進コードを含むデフォルトスタイルxmlはどこにありますか?

スタイル 'buttonStyle'とTextViews、Buttonsなどのアスペクトに影響する他のデフォルトスタイルを探しています(アスペクトのスタイルを変更しない場合)

<instalation_folder>\Android-sdk\platforms\Android-<versio>\data\res\values<instalation_folder>\Android-sdk\platforms\Android-<version>\data\res\colorsを検索しましたが、探しているものが実際には見つかりませんでした。

私の質問が明確であることを願っています。


回答

少しグーグルで、「buttonStyle」は実際には「Widget.Button」であることがわかりました- Styling Android With Defaults

これがどのように機能するかです:

  • 私が言ったように、 'buttonStyle'スタイルは\Android-sdk\platforms\Android-<version>\data\res\values\styles.xmlで定義された 'Widget.Button'スタイルです。背景は@Android:drawable/btn_defaultに設定されます
  • \Android-sdk\platforms\Android-<version>\data\res\drawable\btn_default.xmlは、セレクターとしてボタンの背景色を定義します。色は実際にはボタンの状態に依存します。デフォルトの色は@drawable/btn_default_normalに設定されています
  • 少し調べてみると、btn_default_normalは\Android-sdk\platforms\Android-<version>\data\res\drawable-mdpiにあるpng画像です

少しわかりにくいですが、誰かの助けになるといいのですが...

39
Kajiyama

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_という名前のファイルを見つける必要があります。

これは、イメージ(非常にまれ)または_btn_default.xml_などの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>
_

これがセレクターのドロアブル(多くのドロアブル型の1つ)であることを理解する必要があります。このセレクタは、ボタンの状態に基づいて異なる背景を選択します。たとえば、ボタンが押された場合、ボタンの背景は異なります。

デフォルト状態を見てみましょう。

_<item Android:state_enabled="true" Android:drawable="@drawable/btn_default_normal" />_

_btn_default_normal_と呼ばれるドロアブルを適用します。

次に、このドロアブルを見つける必要があります。

繰り返しますが、_btn_default_normal.*_の下にある描画可能なフォルダーの1つで_Android-sdk\platforms\Android-15\data\res_という名前のファイルを見つける必要があります。

これも、画像または_btn_default_normal.xml_のようなxmlファイルのいずれかです。

さまざまな解像度のさまざまな描画可能フォルダに「btn_default_normal.9.png」という名前の複数のファイルがあります。

:)これで、_btn_default_normal.9.png_がボタンの背景として設定されていることがわかりました。

126
forgemo

XMLで宣言すると、Androidウィジェットのデフォルトスタイルを見つけることができます。

style="@Android:style/Widget.Button" - standard Button
style="@Android:style/Widget.TextView" - standard TextView

たとえば、これはデフォルトボタンのスタイルです。

    <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>

デフォルトボタンの背景:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/btn_default_normal" Android:state_enabled="true" Android:state_window_focused="false"/>
    <item Android:drawable="@drawable/btn_default_normal_disable" Android:state_enabled="false" Android:state_window_focused="false"/>
    <item Android:drawable="@drawable/btn_default_pressed" Android:state_pressed="true"/>
    <item Android:drawable="@drawable/btn_default_selected" Android:state_enabled="true" Android:state_focused="true"/>
    <item Android:drawable="@drawable/btn_default_normal" Android:state_enabled="true"/>
    <item Android:drawable="@drawable/btn_default_normal_disable_focused" Android:state_focused="true"/>
    <item Android:drawable="@drawable/btn_default_normal_disable"/>
</selector> 

グラフィックエディターを使用してデフォルトの色を取得できます。デフォルトボタンへのパス NinePatch ..\Android-sdk\platforms\Android-13\data\res\drawable-hdpi

6
Artyom Kiriliyk