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.