การเติมสปินเนอร์โดยตรงในโครงร่าง xml


246

เป็นไปได้หรือไม่ที่จะใส่ตัวเลือกของสปินเนอร์ลงในเลย์เอาต์ xml? หน้านี้แนะนำว่าฉันควรใช้ ArrayAdapter หรือไม่ ดูเหมือนว่าไม่สะดวกที่จะทำ ..

คำตอบ:


582

ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้ แต่ให้มันยิง

ใน strings.xml ของคุณกำหนด:

<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

ในรูปแบบของคุณ:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

ฉันได้ยินมาว่าสิ่งนี้ไม่ได้ผลกับนักออกแบบเสมอไป


39
android:entryValues="@array/array_name_values"แค่อยากจะเพิ่มว่าถ้าคุณต้องการค่าแยกต่างหากต่อรายการที่เลือกคุณสามารถระบุ
ΕГИІИО

3
หนึ่งในบันทึกย่อ ... จากความเข้าใจของฉัน Spinners ไม่สนับสนุนdrawSelectorOnTopเนื่องจากไม่มีตัวเลือกแยกต่างหากนอกเหนือจากตัวหมุน วิธีแก้ปัญหาทำงานได้อย่างแน่นอนขอบคุณ!
Jabari

11
@ ΕГИІИОปินเนอร์ไม่ไม่android:entryValuesสนับสนุน ListPreference ไม่รองรับมัน
TalkLittle

1
@TalkLittle นี่เป็นการคิดค่าเสื่อมราคาล่าสุดหรือไม่ ในช่วงเวลาที่เขียนนี้มันทำงาน
blindstuff

1
@blindstuff ง่ายต่อการตรวจสอบ ดูซอร์สโค้ดของและSpinner AbsSpinnerทั้งบน API 19 และ 23 ตัวสร้าง AbsSpinner ใช้งานได้R.styleable.AbsSpinner_entriesแต่ไม่ได้ใช้entryValuesเลย เป็นเรื่องบังเอิญที่รหัสของคุณกำลังทำสิ่งที่คุณคาดหวัง (หรือ ROM ของผู้ผลิตบางรายอาจมีการใช้งานปินเนอร์แบบกำหนดเองที่จัดการได้จริงandroid:entryValues)
TalkLittle

26

กำหนดสิ่งนี้ในไฟล์ String.xml ของคุณและตั้งชื่ออาร์เรย์ที่คุณต้องการเช่น "น้ำหนัก"

<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>

และรหัสนี้ใน layout.xml ของคุณ

<Spinner 
        android:id="@+id/fromspin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/Weight"
 />

ในไฟล์ java ของคุณgetActivityจะใช้ในส่วน; getActivityถ้าคุณเขียนโค้ดที่กิจกรรมแล้วเอา

a = (Spinner) findViewById(R.id.fromspin);

 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(),
                R.array.weight, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        a.setAdapter(adapter);
        a.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                if (a.getSelectedItem().toString().trim().equals("Kilogram")) {
                    if (!b.getText().toString().isEmpty()) {
                        float value1 = Float.parseFloat(b.getText().toString());
                        float kg = value1;
                        c.setText(Float.toString(kg));
                        float gram = value1 * 1000;
                        d.setText(Float.toString(gram));
                        float carat = value1 * 5000;
                        e.setText(Float.toString(carat));
                        float ton = value1 / 908;
                        f.setText(Float.toString(ton));
                    }

                }



            public void onNothingSelected(AdapterView<?> parent) {
                // Another interface callback
            }
        });
        // Inflate the layout for this fragment
        return v;
    }

-2

เกี่ยวกับความคิดเห็นแรก: หากคุณทำเช่นนี้คุณจะได้รับข้อผิดพลาด (ใน Android Studio) นี่เป็นเรื่องเกี่ยวกับว่ามันอยู่นอกเนมสเปซของ Android หากคุณไม่ทราบวิธีการแก้ไขข้อผิดพลาดนี้โปรดดูตัวอย่างด้านล่าง หวังว่านี่จะช่วยได้!

ตัวอย่างก่อน:

<string-array name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

ตัวอย่าง - หลัง:

<string-array android:name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

1
ใช้งานไม่ได้ ไฟล์ XML ต้องการให้เขาstring-arrayมีnameแอตทริบิวต์และไม่รู้จักไฟล์android:nameนั้น
Dan Chaltiel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.