Android XML 中默认条目的微调项布局

Android Spinner Item Layout for Default Entries in XML

我有两个微调器。其中之一在 运行 时间填充。

groupSpinner.setAdapter(new ArrayAdapter<>(this,
                 android.R.layout.simple_spinner_item, groupNames));

另一个使用字符串数组预先填充在 XML 布局中。

<Spinner ...
    android:entries="@array/my_items_here" />

两个微调器看起来都很好。但是,当显示它们的项目时,子布局在 dropdowndialog 模式下都不匹配。 我一定是遗漏了一些非常简单的东西,但是 我怎样才能将它们设置为使用相同的布局 (希望 android.R.layout.simple_spinner_item),而不创建我自己的自定义布局或加载 XML 运行 时间的字符串数组?

这似乎是一件基本的事情,但我找不到答案,而且我已经搜索了很多。

查看下面的屏幕截图:

*请原谅第二张图片中使用了希腊字符。我已经检查并确认问题与使用希腊字符无关。

试试这个 ((ArrayAdapter)preFilledSpinner.getAdapter()).setDropDownVie‌wResource(android.R.‌​layout.simple_spinne‌​r_item);

要了解它是如何工作的,只需检查 AppCompatSpinner 的代码,下面的 AppCompatSpinner 的默认代码,以了解它在传递条目时的工作原理。

final CharSequence[] entries = a.getTextArray(R.styleable.Spinner_android_entries);
if (entries != null) {
    final ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(context,android.R.layout.simple_spinner_item, entries);
        adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        setAdapter(adapter);
}

当我们通过 XML 传递条目时,他们将创建一个 ArrayAdapter 并在您可以看到的地方应用代码 adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);,默认设置 R.layout.support_simple_spinner_dropdown_item,这应该适用于参数但不幸的是他们已经修复了

我在最近的项目中就是这样做的。 Java代码:

public void spinner_settings() {

    Spinner spinner = (Spinner) findViewById(R.id.spinner);

    adapter =
            ArrayAdapter.createFromResource(this, R.array.activity_list, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            switch(position){
                case 0:
                    // TO-DO something when item selected
                    break;
                case 1:
                    // TO-DO something when item selected
                    break;
                case 2:
                    // TO-DO something when item selected
                    break;
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });
}

res-> 值 -> strings.xml

<resources>
    <string-array name="activity_list">
        <item>MainFrame</item>
        <item>Settings</item>
        <item>Translation Rules</item>
    </string-array>
</resources>

res-> 值 -> styles.xml

<resources>
 <!-- For the resting Spinner style -->
        <item name="android:spinnerItemStyle">
            @style/spinnerItemStyle
        </item>

        <!-- For each individual Spinner list item once clicked on -->
        <item name="android:spinnerDropDownItemStyle">
            @style/spinnerDropDownItemStyle
        </item>

    </style>

    <style name="spinnerItemStyle">
        <item name="android:textSize">23sp</item>
        <item name="android:textColor">#000000</item>
        <item name="android:background">#008080</item>
    </style>

    <style name="spinnerDropDownItemStyle">
        <item name="android:padding">5sp</item>
        <item name="android:textSize">25sp</item>
        <item name="android:textColor">#000000</item>
    </style>
    </resources>

希望对您有所帮助!