2010-10-22 7 views
8

Gri ​​ve beyaz (setinverse ...) arka plan renkleri ile birlikte alertdialog'lara sahip olduğumuzu görüyorum.Android - Özel AlertDialog Arkaplan Rengi

Neden sdk'nin themes.xml'sini kontrol ettiğimi, kontrol ettiğimi ve çekildiğini öğrenmek için alertdialog arka planının programatik olarak değil, bazı resimlerle gerçekleştirildiğini anladım. Ve bu görüntüler, sadece farklı bir arka plan rengini ayarlamak için LayoutInflater kullandığımızda iletişim kutusunun üst kısmında (başlık alanı) ve alt kısmında (düğme alanının hemen üstünde) iki gri (veya ters renk olduğunda) yatay çizgiler olduğunu garanti eder.

Sorunuz, LayoutInflator'ın yararsız olduğunu ve alertdialog alt sınıfına sahip olduğumu tahmin ederek, farklı bir arka plan rengiyle bir AlertDialog oluşturmak için ne yapmamızı önerirsiniz? Neyi geçersiz kılmalıyım?

cevap

17

AlertDialog kullanmak yerine, bir Dialog kullanarak bitti. özel bir görünüm elde etmek için:

1-Create başlık alanını (Aksi Üstte de bir boş gri alanı alırsınız) Diyalog ve kaldırma:

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

, xml bir düzen 2-Tasarım ve iletişim'ın içerik olarak ayarlayın:

myDialog.setContentView(R.layout.mydialog_layout); 

3-Eğer düzen yuvarlak rect değil, iletişim kutusunun yuvarlatılmış köşeler ile kesişir. mydialog_layout.xml içinde

:

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> 

etkinlik düğmelere dinleyicileri 4-ekleyin:

Yani, yuvarlak rect olarak düzeni tasarlamak
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(); 
}}); 

Bu konuyla ilgili.

+0

'yasalUyariDialog' ile neler var? yukarıdaki bölüm? Biraz rastgele görünüyor mu? –

+0

evet tamamen bu konuda üzgünüm. Düzeltilmiş –

+0

Ayrıca bunu uyarı ile de yapabilirsiniz ... sadece düzeni ilk olarak layoutinflator ile şişirmeniz gerekir ve daha sonra aynıdır ancak bir simge ve başlık atamak daha kolaydır. – trgraglia

0

Tüm Android Dialog'ların eşit şekilde oluşturulmadığını okumayı hatırlıyorum. Bu nedenle, cihazın Android sürümü ile birlikte gönderilen iletişim kutusunu kullanmak istemiyorsanız; Yeryüzünden tamamen yeni bir iletişim kodu kodlamanız gerekiyor.

Düzenleme:

Sana özel bir iletişim oluşturucu sınıfı ile onCreateDialog geçersiz kılmak gerek. Dediğim gibi, hiç yapmadım. Unutmayın, Android MVC stili ile devam etmek için, diyalogu XML'de de tanımlamanız gerekir. Eğer bunu yapacak olsaydım; Muhtemelen XML düzeniyle başlayacağım, ardından normal bir iletişim kurucu sınıfı ile aynı yöntemleri kullanarak özel bir iletişim sınıfı kodlayacağım. Çok belirsiz olduğum için üzgünüm, hala Java ve Android'i öğreniyorum.

+0

+1 Yanıtın temeli. Peki, işlevsel bir özel diyaloğu elde etmek için hangi yöntemleri geçersiz kılmalıyım? –