web-dev-qa-db-fra.com

Comment changer la couleur d'arrière-plan autour d'un DialogFragment?

Je crée un DialogFragment personnalisé. La disposition de la boîte de dialogue est définie sur my_dialog.xml, mais comment modifier la couleur de la boîte de dialogue (le gris transparent)?

enter image description here

my_dialog.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center" >

    <TextView
        Android:id="@+id/hello"
        Android:layout_width="100dp"
        Android:layout_height="100dp"
        Android:background="@Android:color/holo_orange_light"
        Android:gravity="center"
        Android:text="hello" />

</RelativeLayout>

MyDialogFragment.Java

public class MyDialogFragment extends DialogFragment {

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

        View view = inflater.inflate(R.layout.my_dialog, container);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        return view;
    }
}
39
jul

Je devais régler Android:windowIsFloating à faux et Android:windowBackground à ma couleur personnalisée dans le style de dialogue:

styles.xml

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <style name="MyDialog" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowFrame">@null</item>
        <item name="Android:windowBackground">@color/orange_transparent</item>
        <item name="Android:windowIsFloating">false</item>
        <item name="Android:windowContentOverlay">@null</item>
        <item name="Android:windowTitleStyle">@null</item>
        <item name="Android:colorBackgroundCacheHint">@null</item>
        <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
        <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="Android:gravity">center</item>
    </style>

</resources>

MyDialogFragment

public class MyDialogFragment extends DialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialog);
    }
}
50
jul

Je voulais un fond transparent pour mon DialogFragment, et, dans le code, cela fonctionne bien:

@Override
public void onStart() {
    super.onStart();

    Window window = getDialog().getWindow();
    window.setBackgroundDrawableResource(Android.R.color.transparent);
}

Bien sûr, vous pouvez spécifier n'importe quelle couleur ou Drawable en utilisant setBackgroundDrawable() ou setBackgroundDrawableResource().

Cela fonctionne au moins dans onStart(), mais pas dans onCreate(), et pas nécessairement dans onCreateView(), il semble .

Cela dit, dans la plupart des cas, il est probablement plus propre de le faire en XML, en utilisant des styles , le long de ces lignes:

<style name="MyDialogStyle" parent="@Android:style/Theme.Holo.Light.Dialog">
    <item name="Android:windowBackground">@Android:color/transparent</item>
</style>
26
Jonik

Pour obtenir une boîte de dialogue entièrement transparente, vous pouvez définir dans onCreateView ce qui suit

  • setBackgroundDrawable à Color.TRANSPARENT
  • setDimAmount à 0

Voir l'exemple de code ici:

public class TextEditor extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_text_editor, container);

        // make dialog itself transparent
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        // remove background dim 
        getDialog().getWindow().setDimAmount(0);

        //[add more custom code here...]

        return view;
    }
}
17
Dirk

J'ai trouvé que j'avais juste besoin de faire ça:

<style name="MyDialog" parent="@Android:style/Theme.Dialog">
    <!--  other attributes  -->
    <item name="Android:backgroundDimEnabled">false</item>
</style>
14
Blundell

Remplacer onCréer et définir le style devrait fonctionner.

@Override
public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);
    setStyle(DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent);
}
2
amafernandes

Ceux qui utilisent le générateur AlertDialog dans 'onCreateDialog' au lieu de 'onCreateView' peuvent attribuer un thème comme le code suivant. Un ensemble complet de thèmes peut être trouvé à partir de R.style . N'oubliez pas que certains d'entre eux ont été pris en charge récemment et ne sont pas disponibles sur les anciens téléphones de l'appareil.

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
        builder.setView(view);

        return builder.create();
    }
2
Hesam

La réponse de Jul était presque bonne pour moi. Mais il semble que cela ne fonctionne pas lors de l'utilisation d'un AlertDialog.Builder.

J'ai dû définir le style ici:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );
1
Ignacio Roda

changez votre texte Background sur le XML je viens de modifier votre code remplacez-le par le vôtre

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >

<TextView
    Android:id="@+id/hello"
    Android:layout_width="100dp"
    Android:layout_height="100dp"
    Android:gravity="center"
    Android:text="hello" />

parce que vous avez donné la hauteur et la largeur de TextView de 100dp. et définir un arrière-plan qui remplira toute la boîte de dialogue. puisque votre disposition principale est wrap_content. veuillez accepter la réponse si cela vous a aidé.
Modifier: pour modifier le background il suffit d'ajouter à votre mise en page ou à votre affichage de texte Android:background="#232323" vous pouvez changer ces numéros en n'importe quelle couleur de votre choix. ou vous pouvez définir un arrière-plan à partir de drawable comme Android:background="@drawable/yourpicturename"

0
k0sh