J'ai créé un AlertDialog à l'aide d'AlertDialog.Builder, mais la bordure de dialogue prend trop de place à l'écran. Comment puis-je supprimer la frontière? J'ai essayé d'utiliser une autre activité pour émuler la boîte de dialogue avec un arrière-plan transparent, mais la boîte de dialogue est utilisée à plusieurs reprises et la création d'une nouvelle activité à chaque fois introduit un retard important.
La réponse de ici mentionne qu'il peut être trouvé dans ApiDemos, mais je n'arrive pas à le trouver.
Bon, je vais répondre à ma propre question. Fondamentalement, au lieu d’utiliser AlertDialog.Builder, créez un dialogue ordinaire à l’aide de son constructeur et utilisez un thème approprié au lieu du thème de dialogue par défaut.
Donc, votre code ressemblerait à quelque chose comme ça:
Dialog dialog = new Dialog(this, Android.R.style.Theme_Translucent_NoTitleBar);
J'espère que ceci aide quelqu'un d'autre.
Voici ma solution, pour obtenir un dialogue qui ne montre que votre contenu.
Dialog dialog = new Dialog(this,R.style.ThemeDialogCustom);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//you can move the dialog, so that is not centered
// dialog.getWindow().getAttributes().y = 50; //50 should be based on density
dialog.setContentView(yourLinearLayout);
dialog.setCancelable(true);
//dialog.setOnCancelListener(cancelListener);
dialog.show();
themes.xml // situé dans project/res/values
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeDialogCustom">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowBackground">@color/transparent_color</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:colorBackgroundCacheHint">@null</item>
</style>
</resources>
colors.xml // également situé à cet endroit
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="transparent_color">#00000000</color>
</resource>
Utiliser Android.R.style.Theme_Translucent_NoTitleBar
fonctionne si vous voulez que la boîte de dialogue soit en plein écran. Une alternative consiste à créer votre propre style, comme suit:
<style
name="Theme_Dialog_Translucent"
parent="Android:Theme.Dialog">
<item
name="Android:windowBackground">@null</item>
</style>
essayez ceci: D
Dialog popUpView= new Dialog(this);
popUpView.getWindow().setBackgroundDrawable(new ColorDrawable(0));
si vous avez 2 bordures, vous devez utiliser un ContextThemeWrapper, qui ne montrera qu'une bordure comme vous le souhaitez :)
ContextThemeWrapper wrapper = new ContextThemeWrapper(this, Android.R.style.Theme_Holo);
final LayoutInflater inflater = (LayoutInflater) wrapper.getSystemService(LAYOUT_INFLATER_SERVICE);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);
J'ai ajouté un pixel transparent à drawable et utilisé le code suivant:
dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix);
Vous pouvez demander au constructeur d'appliquer un arrière-plan inverse. Travaillé pour moi pour afficher un écran de démarrage sans bordure avec une source png.
Dans votre fichier de ressources, créez un fichier XML nommé pour, par exemple. null_image.xml, avec le contenu suivant:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<solid Android:color="#0000" />
<size
Android:height="1dp"
Android:width="1dp" />
</shape>
Dans votre code Java, récupérez la fenêtre de dialogue et définissez le fichier XML comme ressource pouvant être dessinée, comme ceci: En fonction de votre contexte:
Dialog dialog = new Dialog(getContext());
Window window = dialog.getWindow();
window.setBackgroundDrawableResource(R.drawable.null_image);
C'est ça, profitez-en.