スピナーをレイアウト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
簡単なメモ...私の理解からdrawSelectorOnTop、Spinner以外には個別のセレクタがないため、Spinnerはサポートしていません。解決策は間違いなく機能します、ありがとう!
Jabari 2013年

11
@ΕГИІИОSpinnerはをサポートしていませんandroid:entryValues。ListPreferenceはそれをサポートします。
TalkLittle 2015年

1
@TalkLittleこれは最近の非推奨ですか?これが書かれた時点では機能していました。
ブラインドスタッフ、2015年

1
@blindstuff確認は簡単です。ソースコードを見てくださいSpinnerAbsSpinner。API 19と23の両方で、AbsSpinnerコンストラクターはを使用しますがR.styleable.AbsSpinner_entries、どこでも使用しませんentryValues。あなたのコードがあなたが期待したことをしていたのは偶然に過ぎません。(または、一部のメーカーのROMには、実際に処理するカスタムのSpinner実装がありますandroid:entryValuesか?)
TalkLittle

26

これをString.xmlファイルで定義し、「Weight」など、必要な配列に名前を付けます

<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名前空間の外にあるということです。このエラーを修正する方法がわからない場合は、以下の例を確認してください。お役に立てれば!

例-Before:

<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-arrayname属性を持たせたいので、属性を認識しませんandroid:name
Dan Chaltiel 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.