如何让Spinner只占用它目前需要的空间?

时间:2014-07-05 13:46:47

标签: android width android-spinner

背景

我试图在actionBar的actionMode中创建一个下拉式微调器。

有些项目中有大量字符,有些只是少数。

问题

在选择短项目时,我希望看到微调器占据项目占用的空间,但实际上,它需要与最大项目相同的大小。

不仅如此,如果文字太长,它也不会允许使用选框效果显示所有内容。

我尝试了什么

我尝试为微调器项目制作自定义布局,并将其设置为" wrap_content"因为它的宽度,但它不起作用。

这是一个基于Android原始simple_spinner_item.xml文件的示例XML文件:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:textAlignment="inherit" />

问题

如何让微调器只占用当前所选项目所需的空间?

另外,我应该如何处理带有长文本的微调器项目(某些语言使文本很难缩短)?

我应该使用PopupMenu吗?

2 个答案:

答案 0 :(得分:0)

不确定是否有这个帮助,但可能设置微调器宽度来包装内容

<Spinner
android:id="@+id/spinner_class"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

答案 1 :(得分:0)

这对我有用。重要的是这个。将上面的代码放在您的适配器上,并使用selectedItemPosition从对象数组中选择文本。

int selectedItemPosition = position;
        if (parent instanceof AdapterView) {
            selectedItemPosition = ((AdapterView) parent)
                    .getSelectedItemPosition();
        }

以下给出实例。

public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        final View spinnerCell;
        if (convertView == null) {
            // if it's not recycled, inflate it from layout
            spinnerCell = inflater.inflate(R.layout.layout_spinner_cell, parent, false);
        } else {
            spinnerCell = convertView;
        }
        int selectedItemPosition = position;
        if (parent instanceof AdapterView) {
            selectedItemPosition = ((AdapterView) parent)
                    .getSelectedItemPosition();
        }

        TextView title = (TextView) spinnerCell.findViewById(R.id.spinnerTitle);
        title.setText(titles[selectedItemPosition]);
        return spinnerCell;
    }

如果您需要说明,请点击此链接:http://coding-thoughts.blogspot.in/2013/11/help-my-spinner-is-too-wide.html