In meiner App habe ich eine einzige Aktivität und alle anderen Fragmente
Ich setze den Hintergrund für die Aktivität von style.xml wie folgt
<item name="Android:windowBackground">@color/very_light_gray</item>
Nun, nur für ein bestimmtes Fragment möchte ich den Hintergrund transparent setzen und ich bin nicht in der Lage, das zu versuchen, wenn der folgende Code in Fragment nicht funktioniert hat
@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);
}
Irgendeine Idee, wie es geht?
verwenden Sie Null für Farbe in Style-App
<item name="Android:windowBackground">null</item>
erstellen Sie einen Rückruf und implementieren Sie ihn in Acitvity
interface OnFragmentDisplay{
onFragmentDisplay();
}
wenn dieses Fragment angezeigt wird, aktualisieren Sie den Aktivitätshintergrund auf transparent
Siehe dieser Link und dies kann helfen
hast du das probiert
fragment.getView().setBackgroundColor(Color.WHITE);
zwei schritte:
Erster Schritt - Erstellen Sie eine Ansicht (in einer XML-Datei) mit transparentem Hintergrund.
suchen Sie im Android Studio nach dem Ordner "res
", klicken Sie mit der rechten Maustaste darauf, new -> Android resource file
. Dann in den erscheinenden Dialog setzen:
File name:
{hier etwas setzen. zum Beispiel - " my_fragment " (ohne Anführungszeichen)} Beachten Sie, dass nur Kleinbuchstaben, Ziffern und Unterstriche in Ordnung sind
Resource type:
Layout
Root element:
LinearLayout (Sie können hier alles andere eingeben, nachdem Sie XML-Layouts besser kennen gelernt haben.)
Source set:
haupt
Directory name:
layout.
In dem erscheinenden Fenster wechseln Sie in den Modus "Text" anstelle von "Design" (suchen Sie nach den Registerkarten links unten auf dem Bildschirm).
dann kopieren und fügen Sie dies anstelle des Inhalts der Datei ein (es ist sehr ähnlich, wir fügen hier nur den "transparenten" Hintergrund hinzu):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/transparent"
>
</LinearLayout>
Zweiter Schritt - blase dieses Layout in deinem Fragment auf.
erstellen Sie Ihre Fragment-Klasse, die Fragment erweitert, und überschreiben Sie die Methode onCreateView (). Blenden Sie in dieser Methode Ihre Ansicht auf und geben Sie sie zurück:
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
// assuming you named your xml file "my_fragment":
// for other names replace R.layout.my_fragment with R.layout.put_your_name_here
View view = inflater.inflate(R.layout.my_fragment, container, false);
return view;
}
vergiss natürlich nicht, eine Instanz deines Fragments in der Aktivität zu erstellen!
Sie müssen Ihre Aktivität auch transparent einstellen.
Android:background="@Android:color/transparent"
Da Ihre Aktivität @color/very_light_gray
hat, funktioniert das Fragment selbst nicht, wenn Sie @Android:color/transparent
einstellen.
Jede Ansicht muss einen transparenten Hintergrund haben, um Überlappungen zu vermeiden.
Angenommen, Sie möchten, dass die Aktivität und das Fragment für ein bestimmtes Fragment transparent sind (Es ist nicht ganz klar, ob Sie dies von Ihrer Frage erwarten, aber ich gehe davon aus, dass dies der Fall ist) "Aktivitätshintergrund transparent, wenn das" transparente "Fragment daran angehängt ist. Wenn ein anderes Fragment an das Fragment angehängt wird, müssen Sie den Aktivitätshintergrund zurücksetzen, da es sonst transparent bleibt.
Es gibt einige Möglichkeiten, dies zu tun, aber ich werde etwas "ziemlich" direktes suchen:
in deinem transparenten Fragment:
@Override
public void onStart() {
super.onStart();
// I'm using null here because drawing nothing is faster than drawing transparent pixels.
getActivity().getWindow().setBackgroundDrawable(null);
getView().setBackground(null);
}
@Override
public void onStop() {
super.onStop();
getActivity().getWindow().setBackgroundDrawable(new ColorDrawable(@color/very_light_gray));
}
Nicht ganz sicher, ob dies der gewünschte Effekt ist.
Viel Glück. Mit freundlichen Grüßen CJ
Eine einfache Möglichkeit ist, die Hintergrundfarbe für das Stammlayout dieses bestimmten Fragments wie folgt festzulegen
Android: Hintergrund = "@ Android: Farbe/transparent"
Sie haben nur den Hintergrund für das Layoutfragment unter dem Code festgelegt:
<LinearLayout
...
Android:background="@Android:color/transparent"/>
Der Layout-Hintergrund Ihres Aktivitätscontainers sollte transparent sein. Legen Sie dann die Hintergrundfarbe für die Layouts von Fragment fest. Legen Sie für ein bestimmtes Fragment-Layout die transparente Farbe fest, um die erforderlichen Szenarien zu erhalten.
Sie können so etwas wie den folgenden Code in Ihrer Aktivität verwenden, während Sie das Fragment instanziieren. Anstelle von Color.White können Sie Ihre eigene Farbe verwenden.
fragment.getView().setBackgroundColor(Color.WHITE);
Fügen Sie diese einzelne Zeile in Ihren Code ein
getActivity().getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
Legen Sie den Stil Ihres Aktivitätslayouts als fest
<style name="RootLayout" parent="AppTheme">
<item name="Android:background">@drawable/app_transparent_background</item>
</style>
und legen Sie es im übergeordneten Layout der Aktivität als fest
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
style="@style/RootLayout"
...>
in anderen Fragmenten, für die Sie einen weißen oder einen anderen farbigen Hintergrund festlegen möchten, legen Sie einen anderen Stil im Hauptlayout des Fragments fest.
Es wird klappen