(Ceci est une image aléatoire montrant une Dialog
trouvée sur Internet.)
J'ai implémenté une coutume Dialog
. Je pouvais presque tout gérer dans la boîte de dialogue, à l'exception de l'arrière-plan noir par défaut situé sous la boîte de dialogue elle-même, mais sur tout l'écran situé derrière. En gros, je veux changer sa valeur couleur et sa valeur alpha.
J'ai parcouru StackOverflow, mais seules les réponses que j'ai trouvées concernaient le changement de fond de Dialog
lui-même. En tout cas si vous en avez besoin, voici mes codes simples.
public class HTDialog extends Dialog{
public HTDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCanceledOnTouchOutside(true);
setContentView(R.layout.custom_dialog);
}
}
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/dialog_root"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:minWidth="280dp"
Android:background="@drawable/bg_popup"
Android:paddingTop="20dp">
<ImageView
Android:id="@+id/dialog_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:src="@drawable/icon" />
</RelativeLayout>
Il s’agit d’une solution de contournement, mais ce n’est pas vraiment une solution pure, car l’arrière-plan est désactivé et doit être configuré manuellement.
Commencez par définir un thème de dialogue personnalisé comme celui-ci.
<style name="CustomDialogTheme" parent="Android:Theme.Dialog">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowIsFloating">false</item>
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
Définir windowIsFloating
sur false force le déploiement de la vue Dialog
en plein écran. Définir windowBackground
sur transparent
supprime le fond noir sombre par défaut sous Dialog
. L'option windowNoTitle
supprime la barre de titre supérieure.
Appliquez le thème et construisez votre vue custom_dialog
comme suit.
public HTCustomDialog(Context context) {
super(context, R.style.CustomDialogTheme);
setContentView(R.layout.custom_dialog);
}
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/main_solid_80">
<RelativeLayout
Android:id="@+id/dialog_root"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:layout_marginLeft="50dp"
Android:layout_marginRight="50dp"
Android:background="@drawable/bg_popup"
Android:padding="16dp">
</RelativeLayout>
Maintenant que la vue CustomDialog
est une vue plein écran, définissez background
de votre mise en page racine sur la couleur de votre choix.
J'ai mosaïqué le résultat un peu.
utiliser un style personnalisé.
<style name="transparent_dialog_borderless" parent="Android:Theme.Dialog">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowIsTranslucent">true</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:background">#FF333333</item>
<item name="Android:windowBackground">@null</item>
<item name="Android:backgroundDimEnabled">true</item>
</style>
Android: backgroundDimEnabled: contrôle le fond noir et sombre
Essayez de définir le style de vos fenêtres de dialogue,
Exemple:
Dialog dialog = new Dialog(context,Android.R.style.Theme_Translucent_NoTitleBar);
essayez le code,
View checkBoxView = View.inflate(context, R.layout.alertbox, null);
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(checkBoxView);
builder.setCancelable(false);
d = builder.create();
d.getWindow().setBackgroundDrawable(new ColorDrawable(0));
d.setView(checkBoxView, 0, 0, 0, 0);
d.show();
nb: la ligne d.setView (checkBoxView, 0, 0, 0, 0); va le faire ...