AlertDialog: Jak usunąć czarne obramowania powyżej i poniżej widoku

To pytanie zostało zadane wcześniej:Tytuł niestandardowy AlertDialog ma czarną ramkę

Ale odpowiedź nie była zadowalająca - i brakuje pewnych informacji.

Próbuję utworzyć niestandardowe okno dialogowe w systemie Android bez tytułu i bez żadnych przycisków na dole.

Jednak wynikowe okno dialogowe ma czarne „obramowania” / „odstępy” / coś wzdłuż górnej i dolnej części widoku.

Zdokumentacja:

Okno dialogowe utworzone za pomocą podstawowej klasy Dialog musi mieć tytuł. Jeśli nie wywołasz setTitle (), to miejsce używane przez tytuł pozostanie puste, ale nadal będzie widoczne. Jeśli nie chcesz w ogóle tytułu, powinieneś utworzyć niestandardowe okno dialogowe za pomocą klasy AlertDialog. Ponieważ jednak AlertDialog jest tworzony najłatwiej z klasą AlertDialog.Builder, nie masz dostępu do metody setContentView (int) używanej powyżej. Zamiast tego musisz użyć setView (Widok). Ta metoda akceptuje obiekt View, więc musisz nadmuchać główny obiekt widoku układu z XML.

Tak właśnie zrobiłem:

Welcome.java

<code>public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        builder.create().show();
    }
}
</code>

welcomedialog.xml

<code><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/texturebg"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:padding="40px">
    ...
</LinearLayout>
</code>

UWAGA: Próbowałem użyćFrameLayout jako rootViewGroup zamiastLinearLayout zgodnie z sugestią, którą gdzieś znalazłem - ale to nie pomogło.

Wynik

setBackgroundDrawable Sugestia
<code>public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        AlertDialog dialog = builder.create();

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

        dialog.show();
    }
}
</code>

Nie działało dla mnie.

questionAnswers(5)

yourAnswerToTheQuestion