web-dev-qa-db-fra.com

Dialogue sans frontières Android

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.

27
kwogger

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.

63
kwogger

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>
33
jokernk

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>
24
jonasb

essayez ceci: D

 Dialog popUpView= new Dialog(this);
 popUpView.getWindow().setBackgroundDrawable(new ColorDrawable(0));
7
Ishanssi

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);
2
douarbou

J'ai ajouté un pixel transparent à drawable et utilisé le code suivant:

dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix);
2
TomBombadil

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.

1
bung_julio

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.

0
greenspand