Android Theme使用3
9588 ワード
テキストリンク
☆obtainStyledAttributesパラメータの説明と使用説明
1) obtainStyledAttributes(int[]attrs)
int[]attrsはattrs.xmlのstyleableに含まれる属性配列を返します.
このstyleableは、obtainStyledAttributes(R.styleable.Tip)を使用します.Tipに含まれる4つの属性配列を返します.
これらの属性の値はどこに書きますか?この方法は私のテストを経て、これらの属性の値はアプリケーションのandroid:themeに対応するstyleの下に書かなければなりません.どういう意味ですか.
プロジェクトManifest.xmlファイルのアプリケーションノードのandroid:themeに対応する値です.
名前name="My.Theme.dalancon"のstyleです.
これによりプログラムコードが取得され、これらの属性値を他のstyleに書くと効果がありません.
2) obtainStyledAttributes(intresid, int[] attrs)
int[]attrs:attrsはattrs.xmlにstyleableに含まれる属性配列を返します.
int resid:attrs配列における属性付与を完了するStyleリソースname
例えば、a=context.obtainStyledAttributes(R.style.tipStyle,R.styleable.Tip);
最初のobtainStyledAttributes(int[]attrs)とは異なり、今回の属性は独立したstyleで値を付けるだけでOKです.theme対応のstyleは大丈夫です.
3) obtainStyledAttributes(AttributeSetset, int[] attrs)
4) obtainStyledAttributes(AttributeSetset, int[] attrs, int defStyleAttr, int defStyleRes)
set:nullを空にすることができます
attrs:attrsはattrs.xmlにstyleableが含む属性配列を返します.
defStyleAttr:attrs.xmlで宣言された属性名.R.attr.tipStyle
defStyleRes:styles.xmlまたはthemes.xmlで宣言されたstyleのid.R.style.tipStyle
最後の2つのパラメータについて説明します. defStyleAttr
a)defStyleAttrがattrs.xmlで宣言された属性に等しい場合
そしてthemeで使います
b)defStyleAttrが0に等しい場合、デフォルト値がないことを示す. defStyleRes
a)defStyleResはあるstyleリソースnameに等しい
例えば、a=context.obtainStyledAttributes(null,R.styleable.Tip,0,R.style.tipStyle);styleの名前がtipStyleのStyleリソースを使用することを示します.
この場合themeで引用する必要はありません.
b)defStyleResは0に等しく、デフォルト値がないことを示す.
最後の2つのパラメータが0の場合、この方法はobtainStyledAttributes(AttributeSet,int[]attrs)と同じです.ソースコードを見るとobtainStyledAttributes(AttributeSet,int[]attrs)で呼び出されているのが
obtainStyledAttributes(AttributeSet set, int[] attrs, 0, 0).この場合、システムthemeに適切な値を探します.この場合、最初のobtainStyledAttributes(int[]attrs)の場合と同様に、themeに対応するstyleの下で各属性に値を割り当てる必要があります.
☆obtainStyledAttributesパラメータの説明と使用説明
1) obtainStyledAttributes(int[]attrs)
int[]attrsはattrs.xmlのstyleableに含まれる属性配列を返します.
<declare-styleablename="Tip">
<attr name="left_icon"format="reference" />
<attr name="tiptextSize"format="dimension" />
<attr name="close_icon"format="reference" />
<attr name="bgcolor"format="color" />
</declare-styleable>
このstyleableは、obtainStyledAttributes(R.styleable.Tip)を使用します.Tipに含まれる4つの属性配列を返します.
これらの属性の値はどこに書きますか?この方法は私のテストを経て、これらの属性の値はアプリケーションのandroid:themeに対応するstyleの下に書かなければなりません.どういう意味ですか.
プロジェクトManifest.xmlファイルのアプリケーションノードのandroid:themeに対応する値です.
<application
android:name="com.My.module.App"
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/My.Theme.dalancon">
名前name="My.Theme.dalancon"のstyleです.
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.TabPageIndicator</item>
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
これによりプログラムコードが取得され、これらの属性値を他のstyleに書くと効果がありません.
2) obtainStyledAttributes(intresid, int[] attrs)
int[]attrs:attrsはattrs.xmlにstyleableに含まれる属性配列を返します.
int resid:attrs配列における属性付与を完了するStyleリソースname
例えば、a=context.obtainStyledAttributes(R.style.tipStyle,R.styleable.Tip);
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
最初のobtainStyledAttributes(int[]attrs)とは異なり、今回の属性は独立したstyleで値を付けるだけでOKです.theme対応のstyleは大丈夫です.
3) obtainStyledAttributes(AttributeSetset, int[] attrs)
4) obtainStyledAttributes(AttributeSetset, int[] attrs, int defStyleAttr, int defStyleRes)
set:nullを空にすることができます
attrs:attrsはattrs.xmlにstyleableが含む属性配列を返します.
defStyleAttr:attrs.xmlで宣言された属性名.R.attr.tipStyle
defStyleRes:styles.xmlまたはthemes.xmlで宣言されたstyleのid.R.style.tipStyle
最後の2つのパラメータについて説明します.
a)defStyleAttrがattrs.xmlで宣言された属性に等しい場合
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
そしてthemeで使います
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.Widget.TabPageIndicator</item>
<item name="tipStyle">@style/tipStyle</item>
</style>
b)defStyleAttrが0に等しい場合、デフォルト値がないことを示す.
a)defStyleResはあるstyleリソースnameに等しい
例えば、a=context.obtainStyledAttributes(null,R.styleable.Tip,0,R.style.tipStyle);styleの名前がtipStyleのStyleリソースを使用することを示します.
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
この場合themeで引用する必要はありません.
b)defStyleResは0に等しく、デフォルト値がないことを示す.
最後の2つのパラメータが0の場合、この方法はobtainStyledAttributes(AttributeSet,int[]attrs)と同じです.ソースコードを見るとobtainStyledAttributes(AttributeSet,int[]attrs)で呼び出されているのが
obtainStyledAttributes(AttributeSet set, int[] attrs, 0, 0).この場合、システムthemeに適切な値を探します.この場合、最初のobtainStyledAttributes(int[]attrs)の場合と同様に、themeに対応するstyleの下で各属性に値を割り当てる必要があります.
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.TabPageIndicator</item>
<itemname="left_icon">@drawable/comment_btn</item>
<itemname="tiptextSize">8sp</item>
<itemname="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>