web-dev-qa-db-fra.com

Android définit un fond transparent pour un fragment

Dans mon application, j'ai une activité unique et tous les autres fragments.

Je suis en arrière-plan pour l'activité de style.xml comme ci-dessous

<item name="Android:windowBackground">@color/very_light_gray</item>

Maintenant, pour seulement un fragment sensible, je veux définir un fond transparent et je ne suis pas capable de le faire. Le code ci-dessous essayé dans Fragment ne fonctionne pas pour moi

  @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);
}

Une idée comment le faire?

8
amodkanthe

utiliser null pour la couleur dans l'application de style

 <item name="Android:windowBackground">null</item>
1
Rasoul Miri

créer un rappel et l'implémenter dans Acitvity 

interface OnFragmentDisplay{
  onFragmentDisplay();
}

lorsque ce fragment affiche update update Background background sur transparent .. ou définissez-le thème dans activité

Voir ce lien et ceci peut aider

avez-vous essayé cela

fragment.getView().setBackgroundColor(Color.WHITE);
1
Xar E Ahmer

deux étapes:

première étape - créer une vue (dans un fichier XML) avec un arrière-plan transparent.

dans Android studio, localisez le dossier "res", cliquez dessus avec le bouton droit, new -> Android resource file. Que dans le dialogue apparaissant, mettez:

File name: {mettre ici n'importe quoi. par exemple - " my_fragment " (sans les guillemets)} notez que seules les lettres minuscules, les chiffres et les traits de soulignement sont corrects

Resource type: Mise en page

Root element: LinearLayout (vous pouvez mettre ici tout ce que vous voudrez après avoir appris à mieux connaître les dispositions XML)

Source set: main

Directory name: mise en page.

Dans la fenêtre qui apparaîtra, passez en mode "texte" au lieu de "dessin" (recherchez les onglets dans le coin inférieur gauche de l'écran).

que copier-coller ceci au lieu du contenu du fichier (c'est très similaire, nous ajoutons ici le fond "transparent"):

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

deuxième étape - gonflez cette mise en page dans votre fragment.

créez votre classe fragment qui étend Fragment et substituez la méthode onCreateView (), à l'intérieur de cette méthode, gonflez votre vue et renvoyez-la:

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

bien sûr, n'oubliez pas de créer une instance de votre fragment dans l'activité!

0
Re'em

Vous devez définir votre activité aussi transparente.

Android:background="@Android:color/transparent"

Puisque votre activité a @color/very_light_gray, même si vous définissez votre fragment sur @Android:color/transparent, cela ne fonctionnera pas.

Chaque vue doit avoir un arrière-plan transparent pour éviter les chevauchements.

0
Gokul Nath KP

Donc, en supposant que vous souhaitiez que l’activité et le fragment soient transparents pour un fragment particulier (il n’est pas clair si c’est ce que vous voulez dans votre question, mais je suppose que c’est le cas) .. vous devez définir le paramètre "Host". "fond d’activité transparent lorsque le fragment" transparent "y est attaché. Lorsqu'un autre fragment y est attaché, vous devrez réinitialiser le fond d'activité ou rester transparent.

Il y a plusieurs façons de faire cela, mais je vais aborder quelque chose de "assez" simple:

dans votre fragment transparent:

      @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));
     }

Pas tout à fait sûr que ce soit l'effet que vous voulez.

Bonne chance . Cordialement, CJ

0
C James

Un moyen simple de faire est de définir la couleur d’arrière-plan pour la disposition racine de ce fragment particulier comme suit

Android: background = "@ Android: couleur/transparent"

0
Uma Achanta

Vous venez de définir l’arrière-plan du fragment de présentation sous le code:

<LinearLayout
...
Android:background="@Android:color/transparent"/>
0
nhonnq

L'arrière-plan de la disposition de votre conteneur d'activité doit être transparent. Puis définissez la couleur de fond pour les mises en page de Fragment. Et pour la disposition des fragments spécifiques, définissez une couleur transparente pour obtenir les scénarios requis. 

0
Zia

Vous pouvez utiliser quelque chose comme le code ci-dessous dans votre activité lors de l'instanciation du fragment. Au lieu de Color.White, vous pouvez utiliser votre propre couleur.

fragment.getView().setBackgroundColor(Color.WHITE);
0
Tony

Ajouter cette seule ligne dans votre code 

getActivity().getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
0
Nik

Définissez le style de votre présentation d'activité comme 

<style name="RootLayout" parent="AppTheme">
    <item name="Android:background">@drawable/app_transparent_background</item>
</style>

et définissez-le dans la disposition parent de l'activité comme 

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

et dans les autres fragments pour lesquels vous souhaitez définir un fond blanc ou un autre fond coloré, définissez un style différent dans la disposition principale de ces fragments. 

Ça va marcher

0
Chintak Patel