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" />
两个微调器看起来都很好。但是,当显示它们的项目时,子布局在 dropdown
和 dialog
模式下都不匹配。
我一定是遗漏了一些非常简单的东西,但是 我怎样才能将它们设置为使用相同的布局 (希望 android.R.layout.simple_spinner_item
),而不创建我自己的自定义布局或加载 XML 运行 时间的字符串数组?
这似乎是一件基本的事情,但我找不到答案,而且我已经搜索了很多。
查看下面的屏幕截图:
*请原谅第二张图片中使用了希腊字符。我已经检查并确认问题与使用希腊字符无关。
试试这个 ((ArrayAdapter)preFilledSpinner.getAdapter()).setDropDownViewResource(android.R.layout.simple_spinner_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>
希望对您有所帮助!
我有两个微调器。其中之一在 运行 时间填充。
groupSpinner.setAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, groupNames));
另一个使用字符串数组预先填充在 XML 布局中。
<Spinner ...
android:entries="@array/my_items_here" />
两个微调器看起来都很好。但是,当显示它们的项目时,子布局在 dropdown
和 dialog
模式下都不匹配。
我一定是遗漏了一些非常简单的东西,但是 我怎样才能将它们设置为使用相同的布局 (希望 android.R.layout.simple_spinner_item
),而不创建我自己的自定义布局或加载 XML 运行 时间的字符串数组?
这似乎是一件基本的事情,但我找不到答案,而且我已经搜索了很多。
查看下面的屏幕截图:
*请原谅第二张图片中使用了希腊字符。我已经检查并确认问题与使用希腊字符无关。
试试这个 ((ArrayAdapter)preFilledSpinner.getAdapter()).setDropDownViewResource(android.R.layout.simple_spinner_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>
希望对您有所帮助!