Android: utwórz wyskakujące okienko z wieloma opcjami wyboru

109

Szukałem wokół, próbując dowiedzieć się, jak utworzyć wyskakujące okienko lub okno dialogowe z 4 opcjami do wyboru.

Widzę to zdjęcie w witrynie programistów Androida:

wprowadź opis obrazu tutaj

Czy ktoś wie, jak zakodować coś takiego jak ten po prawej? Nie potrzebuję żadnych ikon obok mojego tekstu, po prostu muszę mieć możliwość wyboru jednej z 4 opcji.

Cornomaniac
źródło

Odpowiedzi:

289

Możesz utworzyć Stringtablicę z opcjami, które chcesz tam pokazać, a następnie przekazać tablicę do tablicy za AlertDialog.Builderpomocą metody setItems(CharSequence[], DialogInterface.OnClickListener).

Przykład:

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

Wyjście (w systemie Android 4.0.3):

Wynik

(Mapa tła nie jest dołączona.;))

zbr
źródło
5
.create()jest tu niepotrzebne, .show()zwróci okno dialogowe utworzone przez konstruktora, a następnie również je wyświetli
TronicZomB
2
Bardzo ci za to dziękuję. Naprawdę nie chciałem implementować układu XML dla prostego menu tekstowego i nie mogłem znaleźć prostego sposobu na zrobienie tego, dopóki nie natknąłem się na ten post.
Christopher Rathgeb,
Jak możemy wyśrodkować ten tekst i czy możemy ustawić kolor w tym tekście? np. czerwony pokazuje kolor czerwony? zielony tekst wyświetla się w kolorze zielonym?
Ahmad Arslan
Uwaga: ten przykład nie jest wielokrotny, przeczytaj ponownie tytuł z posta :)
Witaj, czy możesz również pokazać, jak mogę ustawić akcje dla wybranych elementów? Przykład: Chcę pozwolić użytkownikowi zmienić język aplikacji, klikając jeden z tych elementów (prawdopodobnie używając instrukcji if).
Arda Çebi,
6

Wyskakujące okienka to nic innego, AlertDialogwięc wystarczy utworzyć AlertDialog, a następnie LayoutInflaternadać pożądany widok za pomocą i ustawić powiększony widok za pomocą setView()metodyAlertDialog

Vishal Pawale
źródło
4

Spróbuj tego :

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();
}
Nikhil jassal
źródło
Myślę, że przełącznik (czcionka [która]) to robi.
3

ALTERNATYWNA OPCJA

To jest mój pierwszy post, więc nie mogę się doczekać udostępnienia mojego kodu! To zadziałało dla mnie:

Umieść te dwie linie nad zdarzeniem OnCreate

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

Umieść ten kod w zdarzeniu, które to wywoła

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();
Bart _
źródło
1
Tak, dużo poprawy. Oświadczenie dotyczące przełącznika poprawia bardziej