2013-03-27 40 views
18

我想要做什麼:安卓應用不同的主題,以一個活動的片段

我希望我的MainActivity使用不同主題的每個片段,使動作條有不同的背景顏色,取決於可見的片段。

現狀:

我創建了使用選項卡+刷卡導航MainActivity。我添加了7個選項卡(= 7個片段)。我創建了一個應該僅應用於第一個片段(fragment_main_1)的主題。

這裏的主題:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
<style name="Blue" parent="android:Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/Blue.ActionBarStyle</item> 
</style> 

<style name="Blue.ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar"> 
    <item name="android:titleTextStyle">@style/Blue.ActionBar.TitleTextStyle</item> 
    <item name="android:background">#33B5E5</item> 
</style> 

<style name="Blue.ActionBar.TitleTextStyle" parent="android:TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textColor">#FFFFFF</item> 
</style> 
</resources> 

創建6個主題後,應該可以通過選項卡刷卡而動作條會自動更改其背景色。

什麼不工作:

添加這些行(我發現這裏的計算器)到Fragment1.java:

// create ContextThemeWrapper from the original Activity Context with the custom theme 
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.Blue); 

// clone the inflater using the ContextThemeWrapper 
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper); 

// inflate the layout using the cloned inflater, not default inflater 
return localInflater.inflate(R.layout.fragment_main_1,container, false); 

我希望你能幫助我:)謝謝。

+1

你有沒有找到一個解決辦法? – jcaruso 2013-08-07 14:03:13

+0

不,我放棄了這個項目:( – Jonas 2013-08-07 18:42:43

+0

有人發現這個問題的答案? – 2013-11-20 04:17:15

回答

2

嘗試用LayoutInflater localInflater = inflater.from(contextThemeWrapper);代替。

+1

感謝您的快速回復,但沒有幫助:( – Jonas 2013-03-27 16:20:37

3

清單中的設置主題通常用於活動。

如果你想設置的主題爲片段,在片段的onCreateView()添加下面的代碼:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

// create ContextThemeWrapper from the original Activity Context with the custom theme 
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.yourCustomTheme); 

// clone the inflater using the ContextThemeWrapper 
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper); 

// inflate the layout using the cloned inflater, not default inflater 
return localInflater.inflate(R.layout.yourLayout, container, false); 
} 

[Source]

+15

您可以至少提及此內容的原始作者:http://stackoverflow.com/a/15496425/4744263之前的任何Ctrl-C Ctrl-V。 – 2016-06-18 18:11:44