webentwicklung-frage-antwort-db.com.de

Android-randloser Dialog

Ich habe einen AlertDialog mit AlertDialog.Builder erstellt, der Dialograhmen nimmt jedoch zu viel Platz auf dem Bildschirm ein. Wie entferne ich die Grenze? Ich habe versucht, eine andere Aktivität zu verwenden, um den Dialog mit einem transparenten Hintergrund zu emulieren, aber der Dialog wird wiederholt verwendet, und das Erstellen einer neuen Aktivität führt jedes Mal zu einer erheblichen Verzögerung.

Die Antwort von here erwähnt, dass es in den ApiDemos zu finden ist, aber ich finde es nicht.

27
kwogger

Okay, ich beantworte meine eigene Frage. Anstatt AlertDialog.Builder zu verwenden, erstellen Sie im Allgemeinen einen regulären Dialog mit seinem Konstruktor und verwenden ein geeignetes Design anstelle des Standard-Dialogdesigns.

Ihr Code würde also ungefähr so ​​aussehen:

Dialog dialog = new Dialog(this, Android.R.style.Theme_Translucent_NoTitleBar);

Hoffe das hilft jemand anderem.

63
kwogger

Hier ist meine Lösung, um einen Dialog zu erhalten, der nur Ihren Inhalt anzeigt.

    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 // befindet sich in 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 // auch dort

<?xml version="1.0" encoding="utf-8"?>
<resources>
       <color name="transparent_color">#00000000</color>
</resource>
33
jokernk

Die Verwendung von Android.R.style.Theme_Translucent_NoTitleBar funktioniert, wenn der Dialog als Vollbild angezeigt werden soll. Eine Alternative besteht darin, einen eigenen Stil zu erstellen, z.

<style
    name="Theme_Dialog_Translucent"
    parent="Android:Theme.Dialog">
    <item
        name="Android:windowBackground">@null</item>
</style>
24
jonasb

versuche das: D

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

wenn Sie 2 Rahmen haben, müssen Sie einen ContextThemeWrapper verwenden, der nur einen Rahmen anzeigt, wie Sie möchten :)

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

Ich habe ein transparentes Pixel zum Zeichnen hinzugefügt und den folgenden Code verwendet:

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

Sie können den Builder bitten, den umgekehrten Hintergrund zu erzwingen. Arbeitete für mich, um einen randlosen Begrüßungsbildschirm mit einer PNG-Quelle anzuzeigen.

1
bung_julio

Erstellen Sie in Ihrer Ressourcendatei eine XML-Datei mit dem Namen z. null_image.xml mit folgendem Inhalt:

<?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>

Rufen Sie in Ihrem Java-Code das Dialogfenster ab und legen Sie die XML-Datei als zeichnungsfähige Ressource fest: Abhängig von Ihrem Kontext:

Dialog dialog = new Dialog(getContext());
Window window = dialog.getWindow();
window.setBackgroundDrawableResource(R.drawable.null_image);

Das ist es, viel Spaß.

0
greenspand