Android: สร้างป๊อปอัปที่มีตัวเลือกให้เลือกมากมาย


109

ฉันพยายามหาวิธีสร้างป๊อปอัปหรือกล่องโต้ตอบที่มี 4 ตัวเลือกให้เลือก

ฉันเห็นภาพนี้บนไซต์นักพัฒนา Android:

ป้อนคำอธิบายภาพที่นี่

มีใครรู้วิธีการเขียนโค้ดบางอย่างเช่นด้านขวา? ฉันไม่ต้องการไอคอนใด ๆ ถัดจากข้อความของฉันฉันแค่ต้องสามารถเลือกได้จาก 4 ตัวเลือก

คำตอบ:


289

คุณสามารถสร้างStringอาร์เรย์กับตัวเลือกที่คุณต้องการที่จะแสดงมีแล้วผ่านอาร์เรย์ไปยังมีวิธีการAlertDialog.BuildersetItems(CharSequence[], DialogInterface.OnClickListener)

ตัวอย่าง:

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

ผลลัพธ์ (บน Android 4.0.3):

เอาต์พุต

(ไม่รวมแผนที่พื้นหลัง;))


5
.create()ไม่จำเป็นที่นี่.show()จะส่งคืนกล่องโต้ตอบที่สร้างโดยผู้สร้างจากนั้นแสดงด้วย
TronicZomB

2
ขอบคุณมากสำหรับสิ่งนี้ ฉันไม่ต้องการใช้เลย์เอาต์ xml สำหรับเมนูข้อความธรรมดาและไม่สามารถหาวิธีง่ายๆในการทำเช่นนี้ได้จนกว่าฉันจะเจอโพสต์นี้
Christopher Rathgeb

เราจะทำอย่างไรให้ข้อความเหล่านี้อยู่ตรงกลางและกำหนดสีภายในข้อความนี้ได้อย่างไร เช่นสีแดงแสดงว่าสีแดง ?? ข้อความสีเขียวแสดงเป็นสีเขียว?
Ahmad Arslan

หมายเหตุ: ตัวอย่างนี้ไม่ได้เป็นหลายรายการอ่านอีกครั้งจากโพสต์ :)

สวัสดีคุณสามารถแสดงวิธีตั้งค่าการดำเนินการสำหรับการเลือกรายการเฉพาะได้อย่างไร ตัวอย่าง: ฉันต้องการให้ผู้ใช้เปลี่ยนภาษาของแอปโดยคลิกที่รายการใดรายการหนึ่ง (อาจใช้คำสั่ง if)
Arda Çebi

6

ป๊อปอัปไม่มีอะไรนอกจากAlertDialogคุณต้องสร้างAlertDialogจากนั้นขยายมุมมองที่คุณต้องการโดยใช้LayoutInflaterและตั้งค่ามุมมองที่สูงเกินจริงโดยใช้setView()วิธีการAlertDialog


4

ลองสิ่งนี้:

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

ฉันคิดว่าสวิตช์ (แบบอักษร [ซึ่ง]) กำลังทำอยู่

3

ตัวเลือกทางเลือก

นี่เป็นโพสต์แรกของฉันดังนั้นฉันจึงรู้สึกตื่นเต้นที่จะแบ่งปันรหัสของฉัน! สิ่งนี้ใช้ได้ผลสำหรับฉัน:

วางสองบรรทัดนี้ไว้เหนือเหตุการณ์ OnCreate

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

วางรหัสนี้ไว้ในเหตุการณ์ที่จะทำให้เกิดสิ่งนี้

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
ใช่การปรับปรุงมาก คำสั่งสวิตช์ปรับปรุงมากขึ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.