我有一个微调器,它的项目用Java代码添加:
spinnerList = new ArrayList<String>();
spinnerList.add("NO2 - maximum 1-hour concentration");
spinnerList.add("CO - maximum 8-hour concentration");
spinnerList.add("O3 - maximum 8-hour concentration");
spinnerList.add("SO2 - maximum 1-hour concentration");
spinnerList.add("PM2.5 - maximum 24-hour concentration");
spinnerList.add("PM10 - maximum 24-hour concentration");
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
firstPageSpinner.setAdapter(dataAdapter);
我想在NO和其他人作为下标后显示2。在其他问题的帮助下,我尝试了这段代码:
...
spinnerList.add(Html.fromHtml("NO<sub>2</sub>") + " - maximum 1-hour concentration");
...
但不幸的是,旋转器项目就像以前一样运行!这是Spinner的问题吗? - 因为我尝试的新代码完全适用于TextViews。
*编辑部分:
我将整个自定义布局添加到问题中:
这是MainActivity xml文件的一部分,包括Spinner:
<LinearLayout
android:id="@+id/firstPageFirstLinear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_above="@+id/firstPageTextView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TextView
android:id="@+id/firstTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/first_text_view" />
<Spinner
android:id="@+id/firstPageSpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:dropDownVerticalOffset="25dp"
android:padding="5dp"
>
</Spinner>
</LinearLayout>
这是custom_spinner_item.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="7dp"
/>
</LinearLayout>
这是我的适配器类:
public class MyAdapter extends ArrayAdapter {
public MyAdapter(Context context, int textViewResourceId, ArrayList<CharSequence> objects) {
super(context, textViewResourceId, objects);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_spinner_item, parent, false);
TextView tvL = (TextView) layout.findViewById(R.id.tvL);
tvL.setText(spinnerList.get(position));
tvL.setTextColor(Color.BLACK);
return layout;
}
@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
}
这是MainActivity类中onCreate的一部分:
ArrayList<CharSequence> spinnerList;
MyAdapter dataAdapter;
final Spinner firstPageSpinner = (Spinner)findViewById(R.id.firstPageSpinner);
spinnerList = new ArrayList<CharSequence>();
spinnerList.add(Html.fromHtml("NO<sub>2</sub>") + "NO2 - maximum 1-hour concentration");
spinnerList.add("CO - maximum 8-hour concentration");
spinnerList.add("O3 - maximum 8-hour concentration");
spinnerList.add("SO2 - maximum 1-hour concentration");
spinnerList.add("PM2.5 - maximum 24-hour concentration");
spinnerList.add("PM10 - maximum 24-hour concentration");
dataAdapter = new MyAdapter(this, R.layout.custom_spinner_item, spinnerList);
dataAdapter.setDropDownViewResource(R.layout.custom_spinner_item);
firstPageSpinner.setAdapter(dataAdapter);
它正在运行像之前一样的微调器项目。
答案 0 :(得分:1)
这是Spinner的问题吗?
至少在某种程度上,您的数据模型存在问题。 Html.fromHtml()
未返回String
。它返回一个Spanned
实例,它将包含格式。由于您将Spanned
填充到ArrayList<String>
,因此Android会在toString()
上调用Spanned
,从而消除格式化。
将您的ArrayList<String>
更改为ArrayList<CharSequence>
,并将ArrayAdapter<String>
更改为ArrayAdapter<CharSequence>
,您可能会有更好的运气。
答案 1 :(得分:1)
我有一个解决方案,但可能不仅仅是最好的解决方案。 您可以在自己创建的自定义布局中模拟所需的标记和行为。
让我们考虑在xml文件中放置三个TextView而不是那个。然后设置第一个和最后一个相等的字体大小,以及中间项目的较小大小。
或另一个:用LinearLayout替换TextView,并在适配器中填充所需的TextViews。所以你现在可以设置一个html代码作为输入,如果你看到一个sub,为它做一个特殊的TextView。
我们在公司中称这种解决方案为“桅杆式”或“恶劣”,我很聪明地找到这些解决方案。
答案 2 :(得分:0)