Android: birden çok seçim seçeneğine sahip bir açılır pencere oluşturun


109

Aralarından seçim yapabileceğiniz 4 seçeneğe sahip bir açılır pencere veya iletişim kutusu oluşturmayı anlamaya çalışırken etrafta arama yapıyorum.

Bu resmi Android geliştirici sitesinde görüyorum:

görüntü açıklamasını buraya girin

Sağdakine benzer bir şeyin nasıl kodlanacağını bilen var mı? Metnimin yanında herhangi bir simgeye ihtiyacım yok, sadece 4 seçenekten birini seçebilmem gerekiyor.

Yanıtlar:


289

Bir oluşturabilir Stringorada göstermek ve daha sonra bir diziyi aktarmak istediğiniz seçenekleri ile dizi AlertDialog.Builderyöntemi ile setItems(CharSequence[], DialogInterface.OnClickListener).

Bir örnek:

String[] colors = {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

Çıktı (Android 4.0.3'te):

Çıktı

(Arka plan haritası dahil değildir.;))


5
.create()burada gereksizdir .show(), inşaatçı tarafından oluşturulan iletişim kutusunu döndürür ve sonra da gösterir
TronicZomB

2
Bunun için çok teşekkür ederim. Basit bir metin menüsü için bir xml düzeni uygulamak istemedim ve bu gönderiye rastlayana kadar bunu yapmanın kolay bir yolunu bulamadım.
Christopher Rathgeb

Bu metni nasıl ortalayabiliriz ve bu metnin içindeki rengi belirleyebilir miyiz? örneğin kırmızı, kırmızı rengi mi gösterir? yeşil metin yeşil renkte mi görüntüleniyor?
Ahmad Arslan

Not: bu örnek birden fazla değildir,

Merhaba, belirli öğe seçimleri için eylemleri nasıl ayarlayabileceğimi de gösterebilir misiniz? Örnek: Kullanıcının bu öğelerden birine tıklayarak (muhtemelen if ifadesini kullanarak) uygulama dilini değiştirmesine izin vermek istiyorum.
Arda Çebi

6

Açılır pencereler başka bir şey değildir. Bu nedenle, AlertDialogyalnızca oluşturmanız AlertDialog, ardından istediğiniz görünümü kullanarak şişirmeniz LayoutInflaterve aşağıdaki setView()yöntemini kullanarak şişirilmiş görünümü ayarlamanız gerekir .AlertDialog


4

Bunu dene :

public void onClick(View v) {

    final String[] fonts = {
        "Small", "Medium", "Large", "Huge"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(TopicDetails.this);
    builder.setTitle("Select a text size");
    builder.setItems(fonts, new DialogInterface.OnClickListener() {@
        Override
        public void onClick(DialogInterface dialog, int which) {
            if ("Small".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you nailed it", Toast.LENGTH_SHORT).show();
            } else if ("Medium".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you cracked it", Toast.LENGTH_SHORT).show();
            } else if ("Large".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you hacked it", Toast.LENGTH_SHORT).show();
            } else if ("Huge".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you digged it", Toast.LENGTH_SHORT).show();
            }
            // the user clicked on colors[which]

        }
    });
    builder.show();
}

Sanırım switch (yazı tipi [hangisi]) yapıyor.

3

ALTERNATİF SEÇENEK

Bu benim ilk gönderim, bu yüzden kodumu paylaşmaktan heyecan duyuyorum! Bu benim için çalıştı:

Bu iki satırı OnCreate olayının üzerine yerleştirin

final String[] Options = {"Red", "Blue"};
AlertDialog.Builder window;

Bu kodu, bunu tetikleyecek olaya yerleştirin

window = new AlertDialog.Builder(this);
window.setTitle("Pick a color");
window.setItems(Options, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
           //first option clicked, do this...

        }else if(which == 1){
           //second option clicked, do this...

        }else{
        //theres an error in what was selected
            Toast.makeText(getApplicationContext(), "Hmmm I messed up. I detected that you clicked on : " + which + "?", Toast.LENGTH_LONG).show();
        }
    }
});

window.show();

1
Evet çok gelişme. Bir switch ifadesi daha da
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.