2016-03-01 110 views
1

對不起,可能會令人困惑的標題如何從LinearLayout自己的樣式設置LinearLayout的子視圖?

所以我使用ViewPagerIndicator,這是一個在TabLayout 5.0版本發佈之前常用的標籤庫。在這個庫中,選項卡是擴展TextView的視圖,它接受樣式的自定義屬性。

//An inner class of TabPageLayout 
private class TabView extends TextView { 
    private int mIndex; 

    public TabView(Context context) { 
     super(context, null, R.attr.vpiTabPageIndicatorStyle); //<--custom attribute 
    } 
    // ... 
} 

vpi__attrs.xml

<resources> 
    <declare-styleable name="ViewPagerIndicator"> 
     ... 
     <!-- Style of the tab indicator's tabs. --> 
     <attr name="vpiTabPageIndicatorStyle" format="reference"/> 
    </declare-styleable> 
    ... 

採用這種設置,當我在自己的項目中使用TabPageLayout,我可以定義文本的樣式像這樣

<!--This is styles.xml of my project --> 
<style name="MyStyle.Tabs" parent="MyStyle" > 
     <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> 

    </style> 

    <style name="CustomTabPageIndicator"> 
     <item name="android:gravity">center</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">@dimen/secondary_text_size</item> 
     ... 
    </style> 

以下樣式將應用於Activity,並且它將覆蓋ViewPagerIndicator庫中的默認vpiTabPageIndicator。

我現在的問題是,我需要對TabView進行更多的定製,而不是TextView允許的,所以我創建了一個名爲「TabLayoutWithIcon」的新內部類,它擴展了LinearLayout幷包含了一個TextView。

private class TabViewWithIcon extends LinearLayout { 
    private int mIndex; 
    private TextView mText; 

    public TabViewWithIcon(Context context) { 
     super(context, null, R.attr.vpiTabPageIndicatorStyle); 
     //setBackgroundResource(R.drawable.vpi__tab_indicator); 
     mText = new TextView(context); 
    } 
    ... 

    public void setText(CharSequence text){ 
     mText.setText(Integer.toString(mIndex) + " tab"); 
     addView(mText); 
    } 

    public void setImage(int iconResId){ 
     mText.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0); 
     mText.setCompoundDrawablePadding(8); //Just temporary 
    } 

現在將相同的自定義樣式應用於LinearLayout,但我也想對樣式TextView子樣式。我怎樣才能做到這一點?

當然,我也可以只通過在TextView的編程內TabViewWithIcon一個風格,像

 mText.setTextAppearance(context, R.style.CustomTabTextStyle); 

但我會寫的圖書館,我不應該在我的自定義樣式這樣做。

我是否需要重新定義某些屬性或其他內容?我是否錯誤地處理了這個問題?

回答

0

林白癡,我只是將自定義的TextView風格融入TextView的

public TabView(Context context) { 
     super(context, null, R.attr.vpiTabPageIndicatorStyle); 
     //setBackgroundResource(R.drawable.vpi__tab_indicator); 
     mText = new TextView(context, null, R.attr.vpiTabPageIndicatorStyle); 
    }