2010-10-22 17 views
8

Also ich sehe, wir können Alertdialogs mit grau und weiß (wenn setverse ...) Hintergrundfarben haben.Android - Benutzerdefinierte AlertDialog Hintergrundfarbe

Um zu erfahren, warum ich themes.xml von der SDK überprüft habe, wurde ich zu drawables geführt und dort erkannte ich, dass der alertdialog Hintergrund nicht programmatisch, sondern über einige Bilder gemacht wird. Und diese Bilder garantieren, dass es zwei graue (oder weiße wenn inverse Farbe) horizontale Linien oben (Titelbereich) und unten (knapp oberhalb des Schaltflächenbereichs) des Dialogs gibt, wenn wir LayoutInflater verwenden, um einfach eine andere Hintergrundfarbe einzustellen.

Also meine Frage ist, wie LayoutInflator ist nutzlos und rate ich habe Alertdialog Unterklasse, was schlagen Sie vor, ich mache einen AlertDialog mit einer anderen Hintergrundfarbe? Was sollte ich außer Kraft setzen?

Antwort

17

Anstatt AlertDialog zu verwenden, endete ich mit einem Dialog. Um einen benutzerdefinierten Look:

1-Erstellen Sie den Dialog und entfernen Sie den Titelbereich (Sonst wirst du einen leeren grauen Bereich auf der Oberseite deutlich):

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

2-Entwerfen Sie ein Layout in xml, und eingestellt als Inhalt des Dialogfelds:

myDialog.setContentView(R.layout.mydialog_layout); 

3-Wenn das Layout kein abgerundetes rect ist, wird es mit den abgerundeten Ecken des Dialogfelds schneiden. So entwerfen das Layout als abgerundete rect:

in 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-Add Zuhörer auf die Tasten in Ihrer Aktivität:

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(); 
}}); 

Das ist es.

+0

Was ist mit dem 'yasalUyariDialog'? Abschnitt oben? Es scheint ein bisschen zufällig? –

+0

yeah total sorry über das.fixed –

+0

Sie können dies auch mit Alert tun ... Sie müssen nur das Layout zuerst mit layaufinflator aufblasen und dann ist es das gleiche, aber einfacher, ein Symbol und einen Titel zuzuweisen. – trgraglia

0

Ich erinnere mich zu lesen, dass nicht alle Android Dialoge gleichermaßen erstellt werden. Daher, wenn Sie nicht den Dialog verwenden möchten, der mit der Android-Version des Geräts geliefert wurde; Sie müssen einen komplett neuen Dialog von Grund auf programmieren.

Edit:

Ich glaube, Sie brauchen die onCreateDialog mit einer benutzerdefinierten Dialog Builder-Klasse außer Kraft zu setzen. Wie ich schon sagte, ich habe es noch nie gemacht. Denken Sie daran, dass Sie den Dialog in XML definieren müssen, um den Android-MVC-Stil beizubehalten. Wenn ich es tun würde; Ich würde wahrscheinlich mit dem XML-Layout beginnen und dann eine benutzerdefinierte Dialogklasse mit den gleichen Methoden wie eine normale Dialog-Builder-Klasse programmieren. Tut mir leid, so vage zu sein, ich lerne Java und Android selbst noch.

+0

+1 Thx für die Antwort. Welche Methoden sollte ich überschreiben, um ein funktionelles benutzerdefiniertes Dialogfeld zu erhalten? –

Verwandte Themen