J'essaie d'ajouter des coins arrondis à AlertDialog
, mais je ne comprends pas la logique du fichier de forme (qui ne fonctionne pas). Je l'utilise comme arrière-plan dans le RelativeLayout
du AlertDialog
, mais il semble qu'il soit ignoré. Voici le fichier de forme:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/dialog_rl" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" tools:context=".UserList" android:background="@drawable/shape_dialog"> <TextView android:id="@+id/dialog_titile" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Scegli un'operazione" android:textAlignment="center" android:padding="5dp" android:textColor="@android:color/black" android:background="#D3D3D3" android:textSize="26dp" /> <TextView android:id="@+id/dialog_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Vuoi aprire o eliminare il test?" android:textAlignment="center" android:padding="15dp" android:textSize="26dp" android:layout_marginLeft="80dp" android:background="@android:color/white" android:textColor="@android:color/black" android:layout_below="@id/dialog_titile" /> <Button android:id="@+id/dialog_neutral_btn" android:layout_width="80dp" android:layout_height="wrap_content" android:text="Indietro" android:layout_below="@id/dialog_tv" android:textColor="@android:color/black" android:background="@drawable/button_bg_3" /> <Button android:id="@+id/dialog_positive_btn" android:layout_width="80dp" android:layout_height="wrap_content" android:textColor="@android:color/black" android:text="Apri" android:layout_alignBaseline="@id/dialog_neutral_btn" android:layout_alignParentRight="true" android:background="@drawable/button_bg_3" android:layout_marginRight="20dp"/> <Button android:id="@+id/dialog_negative_btn" android:layout_width="80dp" android:layout_height="wrap_content" android:textColor="@android:color/black" android:text="Elimina" android:layout_toLeftOf="@id/dialog_positive_btn" android:layout_alignBaseline="@id/dialog_neutral_btn" android:background="@drawable/button_bg_3" android:layout_marginRight="10dp" /> </RelativeLayout>
Voici la boîte de dialogue d'alerte xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/transparent"/> <corners android:radius="10dp" /> <padding android:left="10dp" android:right="10dp"/> </shape>
Et voici le résultat Qu'est-ce que j'ai manqué?
5 Réponses :
Utilisez la classe Dialog
au lieu de AlertDialogBuilder
.
Extrait de code
définir cette méthode showDialog ()
avec l'utilisation de la classe Dialog au lieu de AlertBuilder
android.app.AlertDialog
android.support.v7.app.AlertDialog
Remarque: -
yourButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(); } });
au lieu de
public void showDialog() { final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.your_xml); Button dialog_neutral_btn = dialog.findViewById(R.id.dialog_neutral_btn); Button dialog_positive_btn = dialog.findViewById(R.id.dialog_positive_btn); Button dialog_negative_btn=dialog.findViewById(R.id.dialog_negative_btn); TextView dialog_titile = dialog.findViewById(R.id.dialog_titile); TextView dialog_tv = dialog.findViewById(R.id.dialog_tv); // do you stuff here , define click listeners dialog.show(); }
Si vous voulez utiliser AlertDialogBuilder
Je ne pense pas que votre réponse soit très pertinente, il demande ici comment faire des coins arrondis et non comment montrer un dialogue. Vous êtes invités à me corriger si je me trompe
Et comme je l'ai mentionné, utilisez la classe Dialog "Au lieu" d'AlertDilogBuilder "est la solution à laquelle j'ai répondu au problème
Dans ce cas, c'était mon malentendu. Tu as mon vote positif
Votre vote positif ne m'importe que si ma réponse fonctionne. Ici pour aider avec des réponses qui fonctionnent pour eux. Je ne suis pas le meilleur mais j'apprends :)
J'ai rencontré des problèmes avec le comportement d'AlertDialogBuilder sur différentes versions, alors je choisis la classe Dialog
J'ai vérifié votre forme et ça a l'air bien sur mon téléphone, j'ai cette forme qui fonctionne de la même manière + avoir un dégradé:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="-90" android:centerColor="#F2F2F2" android:endColor="#ADA996" android:startColor="#DBDBDB" /> <stroke android:width="2dp" android:color="#000000" /> <corners android:radius="8dp" /> <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" /> </shape>
Essayez d'utiliser la forme ci-dessus, si cela ne fonctionne pas de toute façon, essayez d'utiliser votre forme sur un seul bouton - si vous voyez votre forme fonctionner correctement, vous saurez que votre problème vient de votre fichier de mise en page.
Et peut-être que tout ce que vous avez à faire Invalidate Caches / Restart
, il est possible que vous n'ayez pas d'erreur mais que votre application utilise une ancienne forme provenant du cache
Je pense que le comportement d'AlertDialogBuilder varie selon les versions. C'est ce que je pense et si l'invalidation du studio aide, c'est parfait de toute façon, je n'ai jamais essayé ça
Votre shape_dialog.xml doit ressembler à
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Vous devez définir l'arrière-plan de la boîte de dialogue comme transparent.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white"/> <corners android:radius="30dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape>
Il suffit d'utiliser le matériel officiel AlertDialog inclus dans la bibliothèque officielle des composants matériels pour Android.
<!-- Alert Dialog --> <style name="MyThemeOverlayAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog"> <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded</item> </style> <style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent=""> <item name="cornerFamily">rounded</item> <item name="cornerSize">8dp</item> </style>
et utilisez le thème
<item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>
Il suit les consignes:
Vous pouvez personnalisez la forme de votre composant à l'aide de shapeAppearanceOverlay
.
Quelque chose comme:
new MaterialAlertDialogBuilder(context) .setTitle("Title") .setMessage("Message") .setPositiveButton("Ok", null) .show();
Avez-vous une idée s'il est possible de personnaliser le rayon du coin en utilisant MaterialAlertDialogBuilder
?
@TamirAbutbul Vous pouvez définir un style (que vous pouvez transmettre à MaterialAlertDialogBuilder
) à l'aide de l'attribut shapeAppearanceOverlay
. Réponse mise à jour.
Vous pouvez y parvenir en suivant les étapes ci-dessous.
Vous devez créer deux formes xml dessinables pour Textview et pour la mise en page principale
public void showPopup(View anchorView) { final View popupView = getLayoutInflater().inflate(R.layout.main_popup, null); RelativeLayout layout_close; // Declare your views here final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setAnimationStyle(R.style.popup_window_animation); layout_feedback_close = (RelativeLayout) popupView.findViewById(R.id.layout_feedback_close); // Here find view by ids layout_feedback_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); popupWindow.setFocusable(true); popupWindow.setBackgroundDrawable(new ColorDrawable()); int location[] = new int[2]; anchorView.getLocationOnScreen(location); popupWindow.showAtLocation(anchorView, Gravity.CENTER, location[0], location[1] + anchorView.getHeight()); }
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="15dp" android:background="@drawable/border_no_white_bg" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" android:background="#CCCCCC" android:baselineAligned="false" android:gravity="center" android:padding="10dp" android:text="Scegli un'operazione" android:textColor="#000" android:textSize="18sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" android:baselineAligned="false" android:gravity="center" android:padding="10dp" android:text="Vuoi aprire o eliminare il test?" android:textColor="#000" android:textSize="18sp" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:background="@drawable/shape_button_orange_bg_with_radius" android:text="Indietro" android:textColor="#000" android:textSize="14sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:background="@drawable/shape_button_orange_bg_with_radius" android:text="Apri" android:textColor="#000" android:textSize="14sp" /> <Button android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginRight="15dp" android:background="@drawable/shape_button_orange_bg_with_radius" android:text="Elimina" android:textColor="#000" android:textSize="14sp" /> </LinearLayout> </RelativeLayout> </LinearLayout> </RelativeLayout> 4. popup_window_animation Inside res->values->style.xml, add this code <style name="popup_window_animation"> <item name="android:windowEnterAnimation">@anim/fade_in</item> <item name="android:windowExitAnimation">@anim/fade_out</item> </style>
Maintenant, créez une méthode pour appeler cette mise en page
1. border_no_white_bg.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white" /> <stroke android:width="1dp" android:color="@color/white" /> <corners android:radius="6dp" /> </shape> 2. shape_button_orange_bg_with_radius.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="1dp" android:color="@color/black" /> <corners android:radius="15dp" /> </shape> 3. Now in main_popup.xml, replace by below code <?xml version="1.0" encoding="utf-8"?>
Copie possible de Comment créer un dialogue personnalisé avec des coins arrondis dans android