2010-10-22 26 views
8

Widzę więc, że możemy mieć alarmy z szarymi i białymi (gdy zmienimy ...) kolorami tła.Android - Custom AlertDialog Kolor tła

Aby dowiedzieć się, dlaczego sprawdziłem plik themes.xml sdk, sprawdzając, że zostałem poprowadzony do rysunków i tam zdałem sobie sprawę, że tło alertdialog nie jest zrobione programowo, ale za pomocą niektórych obrazów. Te obrazy gwarantują, że na wierzchu (obszar tytułu) i na dole (tuż nad obszarem przycisku) w oknie dialogowym, gdy używamy opcji LayoutInflater do ustawienia innego koloru tła, są dwie poziome linie w kolorze szarym (lub białe, gdy odwrócone kolory).

Moje pytanie brzmi, jak LayoutInflator jest bezużyteczny i zgaduję, że muszę subklasować alertdialog, co sugerujesz zrobić, aby wygenerować AlertDialog z innym kolorem tła? Co powinienem zastąpić?

Odpowiedz

17

Zamiast używać AlertDialog, w końcu skorzystałem z okna dialogowego. Aby uzyskać niestandardowy wygląd:

1 utworzyć dialogowe i usunąć obszar z tytułem (w przeciwnym razie dostaniesz pusty szary obszar na górze):

myDialog = new Dialog(this); 
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

2-zaprojektować układ w formacie XML, a ustaw jako zawartość okna dialogowego:

myDialog.setContentView(R.layout.mydialog_layout); 

3-Jeśli układ nie jest zaokrąglone rect będzie przeplatać się z zaokrąglonych rogach okna dialogowego. Tak, jak zaprojektować układ zaokrąglone rect:

w mydialog_layout.xml:

android:background = "@layout/mydialog_shape" 

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 
    <gradient android:startColor="#FF0E2E57" 
    android:endColor="#FF0E2E57" 
      android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
    android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape> 

4-Dodaj słuchaczy do przycisków w swojej działalności:

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton); 
button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myDialog.cancel(); 
}}); 

To wszystko.

+0

Co to jest "yasalUyariDialog". sekcja powyżej? Wydaje się nieco losowy? –

+0

Tak, całkowicie przepraszam za to. Naprawiono –

+0

Możesz to również zrobić z alertem ... musisz najpierw nadmuchać układ za pomocą layoutinflator, a potem jest tak samo, ale łatwiej jest przypisać ikonę i tytuł. – trgraglia

0

Przypominam, że nie wszystkie dialogi systemu Android są tworzone w równym stopniu. Dlatego jeśli nie chcesz używać okna dialogowego dostarczanego z wersją Androida urządzenia; Musisz od nowa napisać całkowicie nowy dialog.

Edit:

Chyba trzeba zastąpić onCreateDialog z klasy dialogowym zwyczaj budowniczy. Tak jak powiedziałem, nigdy tego nie robiłem. Pamiętaj, aby zachować styl MVC w systemie Android, musisz również zdefiniować okno dialogowe w XML. Gdybym miał to zrobić; Najprawdopodobniej zacznę od układu XML, a następnie zakodowuję niestandardową klasę dialogową przy użyciu tych samych metod co zwykła klasa budującego okno dialogowe. Przepraszam, że jestem tak nieokreślony, że sam nadal uczę się Javy i Androida.

+0

+1 Thx za odpowiedź. Jakie metody powinienem zastąpić, aby uzyskać funkcjonalne niestandardowe okno dialogowe? –