Android Theme使用3


テキストリンク
☆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つのパラメータについて説明します.
  • defStyleAttr

  • 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に等しい場合、デフォルト値がないことを示す.
  • defStyleRes

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