2013-03-27 4 views
18

Was ich tun möchte:Android: Verwenden Sie verschiedene Themen auf Fragmente einer Aktivität

Ich möchte jedes Fragment meiner MainActivity ein anderes Thema zu verwenden, so dass die ActionBar verschiedenen Hintergrund-Farben, je nach das sichtbare Fragment.

Die Situation:

habe ich eine MainActivity, die die Tabs + Swipe-Navigation verwendet. Ich habe 7 Tabs hinzugefügt (= 7 Fragmente). Ich habe ein Theme erstellt, das nur auf das erste Fragment (fragment_main_1) angewendet werden sollte.

Hier wird das Thema:

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

Nach dem Erstellen 6 weitere Themen sollte es möglich sein, durch den Tabs zu streichen, während die ActionBar automatisch seine Hintergrundfarbe ändern.

Was hat nicht funktioniert:

diese Zeilen hinzufügen (die ich hier auf Stackoverflow gefunden) zum 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); 

Ich hoffe, dass Sie mir helfen können :) Danke .

+1

Haben Sie jemals eine Lösung finden? – jcaruso

+0

Nein, ich gab dieses Projekt auf :( – Jonas

+0

jemand fand eine Antwort auf diese Frage? –

Antwort

2

Versuchen Sie stattdessen LayoutInflater localInflater = inflater.from(contextThemeWrapper);.

+1

Danke für Ihre schnelle Antwort, aber das hat nicht geholfen :( – Jonas

3

Das Festlegen des Themas im Manifest wird normalerweise für Aktivität verwendet.

Wenn Sie Theme für das Fragment festlegen möchten, nächsten Code im onCreateView() des Fragment hinzu:

@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

Sie könnten zumindest den ursprünglichen Autor dieses Inhalts erwähnen: http://StackOverflow.com/a/15496425/4744263 vor irgendeinem Ctrl-C Ctrl-V. –

Verwandte Themen