Android中微调项中的下标和上标

Android中微调项中的下标和上标,android,android-layout,android-spinner,Android,Android Layout,Android Spinner,我有一个微调器,它的项目添加到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("S

我有一个微调器,它的项目添加到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);
spinnerList=newArrayList();
喷丝头列表。添加(“NO2-最大1小时浓度”);
喷丝头列表。添加(“CO-最大8小时浓度”);
喷丝头列表。添加(“O3-最大8小时浓度”);
喷丝头列表。添加(“SO2-最大1小时浓度”);
喷丝头列表。添加(“PM2.5-最大24小时浓度”);
喷丝头列表。添加(“PM10-最大24小时浓度”);
dataAdapter=new ArrayAdapter(这是android.R.layout.simple\u微调器项目,微调器列表);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
setAdapter(dataAdapter);
我想在NO之后显示2,其他的作为下标。在其他问题的帮助下,我尝试了以下代码:

...
spinnerList.add(Html.fromHtml("NO<sub>2</sub>") + " - maximum 1-hour concentration");
...
。。。
喷丝头列表.add(Html.fromHtml(“NO2”)+“-最大1小时浓度”);
...
但不幸的是,微调器项目只是像以前一样运行!这是旋转器的问题吗因为我尝试的新代码在TextView中完全有效

*编辑部分:

我将我的整个自定义布局添加到问题:

这是MainActivity xml文件的一部分,包括微调器:

 <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>

这是自定义的\u微调器\u 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);
    }
}
公共类MyAdapter扩展了ArrayAdapter{
公共MyAdapter(上下文上下文、int-textViewResourceId、ArrayList对象){
超级(上下文、textViewResourceId、对象);
}
公共视图getCustomView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气机=getLayoutInflater();
视图布局=充气器。充气(R.layout.custom\u微调器\u项,父项,false);
TextView tvL=(TextView)layout.findviewbyd(R.id.tvL);
tvL.setText(喷丝头列表.get(位置));
tvL.setTextColor(Color.BLACK);
返回布局;
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
返回getCustomView(位置、转换视图、父级);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
返回getCustomView(位置、转换视图、父级);
}
}
这是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);
ArrayList喷丝板列表;
MyAdapter数据适配器;
最终微调器firstPageSpinner=(微调器)findViewById(R.id.firstPageSpinner);
喷丝头列表=新的ArrayList();
喷丝头列表.add(Html.fromHtml(“NO2”)+“NO2-最大1小时浓度”);
喷丝头列表。添加(“CO-最大8小时浓度”);
喷丝头列表。添加(“O3-最大8小时浓度”);
喷丝头列表。添加(“SO2-最大1小时浓度”);
喷丝头列表。添加(“PM2.5-最大24小时浓度”);
喷丝头列表。添加(“PM10-最大24小时浓度”);
dataAdapter=新的MyAdapter(此,R.layout.custom\u spinner\u项,spinnerList);
dataAdapter.setDropDownViewResource(R.layout.custom\u微调器\u项);
setAdapter(dataAdapter);
它像以前一样运行微调器项

这是旋转器的问题吗

这至少在一定程度上是数据模型的问题
Html.fromHtml()
不返回
字符串。它返回一个
span
实例,该实例将包含格式设置。因为您正在将
span
填充到
ArrayList
中,所以Android正在
span
上调用
toString()
,从而消除格式设置


ArrayList
更改为
ArrayList
,并将
ArrayAdapter
更改为
ArrayAdapter
,您的运气可能会更好。

我为您提供了一个解决方案,但可能不是最好的。 可以在已创建的自定义布局中模拟所需的标记和行为

让我们考虑在XML文件中放置三个TeTVIEW而不是那个。然后将第一个和最后一个项目的字体大小设置为相等,中间项目的字体大小设置为较小

或者另一个:将TextView替换为LinearLayout,并在适配器中填充所需的TextView。因此,您现在可以设置一个html代码作为输入,如果您看到一个子对象,则为其创建一个特定的文本视图


在我们公司,我们称这种解决方案为“mast mal”或“tof mal”,我非常聪明地找到了这些解决方案。

由于@commonware帮助了我,我刚刚更改了这一部分:

spinnerList.add(Html.fromHtml("NO<sub>2</sub>") + "NO2 - maximum 1-hour concentration");
spinnerList.add(Html.fromHtml(“NO2”)+“NO2-最大1小时浓度”);
为此:

spinnerList.add(Html.fromHtml("NO<sub>2</sub> - maximum 1-hour concentration"));
spinnerList.add(Html.fromHtml(“NO2-最大1小时浓度”);

正如您在图片中看到的那样,它确实起到了作用:

我试过这个,但不幸的是没有起作用。运行时的输出仍然是第二位……是否还有其他成功的方法?@Fisher:如果文本恰好也出现在所有大写字母中,您可能需要使用自己的布局,而不是
android.R.layout.simple\u spinner\u item
。否则,除了我引用的问题之外,您肯定还有其他问题,我想不出会有什么问题。您介意帮我找到一个合适的自定义微调器吗?因为我做了一个定制的微调器,但还是和以前一样@费舍尔:嗯,你没有在代码中使用上标和下标。另外,我刚刚意识到,在
Html.fromHtml()
的内容中,您使用
+
将结果与另一个
字符串连接起来。不要那样做。要么将整个文本放在HTML中,要么像现在一样,
+
创建了一个
字符串
,这样您就丢失了格式。谢谢。但问题在于我的决心。我把整个字符串放在Html.fromHtml(“…”)中;问题解决了,我投票支持你只是因为你的方式。dahaneto@Fisher,谢谢你的投票。我希望你将完整的解决方案作为自我回答发布。这将对其他人有所帮助。提前谢谢。