1

我想实现具有以下 2 个请求的微调器:
1. 在显示选择项目列表时,文本左对齐,如下图 4 所示。
2.选择一项后,我想让选中的一项显示右对齐,如下图1。
我的微调器布局微调器布局如下:

                        <Spinner
                            android:id="@+id/spinner1"
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:layout_alignParentRight="true"
                            android:layout_centerVertical="true"
                            android:textColor="#000000"
                            android:gravity="right"
                            android:textAppearance="?android:attr/textAppearanceMedium" />

                    </RelativeLayout>

Adapter的getView如下:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewTag viewTag;
    if(convertView == null) {
        convertView = myInflater.inflate(R.layout.row_spinner, null);
        viewTag = new ViewTag((TextView)convertView.findViewById(R.id.textView1));
        convertView.setTag(viewTag);
    }
    else {
        viewTag = (ViewTag)convertView.getTag();
    }

    viewTag.line1.setText(gd.Lang.get(position));
    viewTag.line1.setTextColor(Color.BLACK);
    viewTag.line1.setSelected(true);
    viewTag.line1.setPadding(0, 0, 40, 0);
    viewTag.line1.setGravity(Gravity.RIGHT);

    return convertView;
}

但它会显示为 Picture.1 和 Picture.2。
如果我将线路更改viewTag.line1.setGravity(Gravity.RIGHT);viewTag.line1.setGravity(Gravity.LEFT);.
它将显示为 Picture.3 和 Picture.4。
如何修改以同时到达 Picture.1 和 Picture.4?

图1 图2 图
在此处输入图像描述
3
在此处输入图像描述

在此处输入图像描述
4
在此处输入图像描述

4

3 回答 3

2

您需要在适配器中设置 getView() 和getDropDownView()

getView() 将为您的图片 1 设置布局,而 getDropDownView() 为您的图片 4 设置 - 顾名思义 - 下拉视图。

检查这个写得很好的答案

于 2013-07-26T02:11:21.807 回答
1

您在适配器类中处理所有这些逻辑,在您的 getView 函数中,您返回的视图将具有所需的文本对齐方式。单击项目时使用基础适配器和函数将该位置存储在适配器类中。并且在基于位置的 getview 中,您可以有任何对齐逻辑。

于 2013-07-26T02:00:19.373 回答
1

如果我们看下面的代码,我们在getView()and中有 name 和 value 数组getDropDownView()

private void initView() {
    SpinnerDropDownAdapter sddadapter = new SpinnerDropDownAdapter(this);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, sddadapter.name);

    Spinner getViewSP = (Spinner) findViewById(R.id.getview_sp);
    getViewSP.setAdapter(adapter);

    Spinner getViewWDropDownSP = (Spinner) findViewById(R.id.getview_w_drop_down_sp);
    getViewWDropDownSP.setAdapter(sddadapter);
}

static class SpinnerDropDownAdapter extends BaseAdapter implements
        SpinnerAdapter {
    Context context;

    SpinnerDropDownAdapter(Context ctx) {
        context = ctx;
    }

    String[] name = { " One", " Two", " Three", " Four", " Five", " Six",
            " Seven", " Eight" };
    String[] value = { " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8" };

    @Override
    public int getCount() {
        return name.length;
    }

    @Override
    public String getItem(int pos) {
        // TODO Auto-generated method stub
        return name[pos];
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(name[position]);
        return text;
    }

    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(value[position]);
        return text;
    }
}
于 2013-07-26T04:48:58.973 回答