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

时间:2015-12-01 18:51:40

标签: 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("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);

它正在运行像之前一样的微调器项目。

3 个答案:

答案 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)

由于@CommonsWare帮助了我,我刚刚改变了这一部分:

tail

到此:

footer

它完全按照你在图片中看到的那样工作:enter image description here