无法让我的微调器填充。好吧,我正在使用strings.xml中的字符串数组填充它,但现在我想为数组添加自定义字体。我第一次使用Custom ArrayAdapter,它在布局xml中覆盖了我的“android:entries =”和“android:prompt =”。
因此,我需要使用strings.xml中的数组填充此微调器
(在onCreate里面)
spinner1 = (Spinner) findViewById(R.id.distancespinner);
MyArrayAdapter ma = new MyArrayAdapter(this, R.layout.my_spinner_style);
spinner1.setAdapter(ma);
然后:
private class MyArrayAdapter extends ArrayAdapter {
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/m01.TTF");
public MyArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public TextView getView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(font);
return v;
}
public TextView getDropDownView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTypeface(font);
return v;
}
}
我尝试在my_spinner_style.xml中添加条目并再次提示......
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerTarget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/location_arrays"
android:prompt="@string/location_prompt"
android:singleLine="True" />
但是,这也不起作用。
答案 0 :(得分:3)
也许这有点晚了。在我实现你的代码和一些额外的测试后,我想我终于得到了答案。微调器没有填充的KEY问题是:
您可以在xml文件中设置微调器的条目,但以编程方式将其替换为EMPTY适配器。
我尝试了以下方法来填充微调器,结果不同:
在没有任何适配器的情况下在xml中设置条目。
<Spinner
android:id="@+id/simple_spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/simpleStringArray"
android:prompt="@string/simplePrompt"/>
它使用正确的内容填充微调器,而没有任何其他样式。
使用另一个设置为微调器的适配器设置xml中的条目(就像你在问题中所做的那样)
in .xml
<Spinner
android:id="@+id/simple_spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/simpleStringArray"
android:prompt="@string/simplePrompt"/>
<。>在.java中:
Spinner mySpinner2 = (Spinner) findViewById(R.id.simple_spinner2);
MySpinnerAdapter2 spinnerAdapter2 = new MySpinnerAdapter2(this, R.layout.simple_list_item);
它显示一个空的微调器。
以编程方式将数据设置为适配器
在.xml中
<。>在.java中 的setContentView(R.layout.activity_spinner);Spinner mySpinner2 = (Spinner) findViewById(R.id.simple_spinner2);
MySpinnerAdapter2 spinnerAdapter2 = new MySpinnerAdapter2(this, R.layout.simple_list_item);
spinnerAdapter2.addAll(items2);
私有类MySpinnerAdapter2扩展了ArrayAdapter {
public MySpinnerAdapter2(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
v.setTextColor(Color.BLUE);
return v;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/Igualb.ttf");
TextView v = (TextView) super.getDropDownView(position, convertView, parent);
v.setTextColor(Color.RED);
v.setTypeface(myFont);
return v;
}
使用cumtom-set字体正确显示内容。
如果您愿意,可以在this github repository中查看完整的项目。
希望这有帮助。
答案 1 :(得分:1)
这是我重写的代码,它工作正常:
Spinner spinner = (Spinner) findViewById(R.id.distancespinner);
spinner.setPromptId(R.string.location_prompt);
MyArrayAdapter ma = new MyArrayAdapter(this, R.layout.my_spinner_style);
ma.addAll(Arrays.asList(getResources().getStringArray(
R.array.location_arrays)));
spinner.setAdapter(ma);
和XML
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerTarget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="True" />
Adapter
是一样的。
答案 2 :(得分:0)
可能是以下行不正确
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/m01.TTF");
m01.TTF
对m01.ttf
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/m01.ttf");