Spinner dân cư trực tiếp trong bố trí xml


246

Có thể điền các tùy chọn của Spinner ngay trong bố cục xml không? Trang này gợi ý tôi nên sử dụng ArrayAd CHƯƠNG? Có vẻ khó xử khi không thể làm điều đó ..

Câu trả lời:


582

Tôi không chắc về điều này, nhưng hãy thử xem.

Trong chuỗi của bạn, hãy xác định:

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

Trong bố cục của bạn:

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

Tôi đã nghe điều này không phải lúc nào cũng làm việc với nhà thiết kế, nhưng nó biên dịch tốt.


39
Chỉ muốn thêm rằng nếu bạn muốn các giá trị riêng biệt cho mỗi mục đã chọn, bạn có thể chỉ định android:entryValues="@array/array_name_values".
Ε é И

3
Một lưu ý nhanh ... theo hiểu biết của tôi, Spinners không hỗ trợ drawSelectorOnTopvì không có bộ chọn riêng nào ngoài Spinner. Các giải pháp chắc chắn hoạt động mặc dù, cảm ơn!
Jabari

11
@ ΕΕИІИИІИ Spinner KHÔNG hỗ trợ android:entryValues. ListPreference không hỗ trợ nó.
TalkLittle

1
@TalkLittle đây có phải là một sự phản đối gần đây? Tại thời điểm này được viết nó đã làm việc.
đồ bịt mắt

1
@blind ware Thật dễ dàng để xác minh. Nhìn vào mã nguồn của SpinnerAbsSpinner. Trên cả API 19 và 23, hàm tạo của absSpinner sử dụng R.styleable.AbsSpinner_entriesnhưng chúng không sử dụng ở đâu entryValues. Chỉ có một sự trùng hợp ngẫu nhiên là mã của bạn đang làm những gì bạn mong đợi. (Hoặc có thể ROM của một số nhà sản xuất có triển khai Spinner tùy chỉnh thực sự xử lý android:entryValues?)
TalkLittle

26

Xác định điều này trong tệp String.xml của bạn và đặt tên cho mảng bạn muốn, chẳng hạn như "Trọng lượng"

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

và mã này trong layout.xml của bạn

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

Trong tệp java của bạn, getActivityđược sử dụng trong đoạn; nếu bạn viết mã đó trong hoạt động, sau đó loại bỏ 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

Liên quan đến nhận xét đầu tiên: Nếu bạn làm điều này, bạn sẽ gặp lỗi (trong Android Studio). Điều này liên quan đến việc nó nằm ngoài không gian tên Android. Nếu bạn không biết cách khắc phục lỗi này, hãy xem ví dụ bên dưới. Hi vọng điêu nay co ich!

Ví dụ -Trước khi:

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

Ví dụ - Sau:

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

1
Không hoạt động. Tệp XML muốn thuộc tính của anh ta string-arraynamethuộc tính và không nhận ra thuộc tính đó android:name.
Dan Chaltiel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.