用多行填充微调器项

时间:2018-03-24 19:16:26

标签: android android-layout android-spinner

我的微调器中的一些项目很长,我希望微调器将文本包装在多行上,具体取决于文本的长度。我为此查看了serval解决方案,但他们不适合我。

这里显示的文字不合适:

enter image description here

这是我在Java中的代码:

public void addItemsOnSpinner3() {

        spinner3D = (Spinner) findViewById(R.id.activities1);
        List<String> list = new ArrayList<String>();
        list.add("Academic Year Opening Program");
        list.add("Academic Year Closing Program");
        list.add("LR1: Defining Primary Care, Health Care Disparities & Vulnerable Populations");
        list.add("LR2: Community Resources and the Elderly");
        list.add("LR3: Inter-professional Teams and the Homeless");
        list.add("LR4: Quality Improvement and Veterans");
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                R.layout.multiline_spinner_row, list);
        dataAdapter.setDropDownViewResource(R.layout.multiline_spinner_row);
        spinner3D.setAdapter(dataAdapter);
    }

我创建了一个名为&#34; multiline_spinner_row.xml&#34;的自定义行。其中singleline更改为false:

<TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    xmlns:android="http://schemas.android.com/apk/res/android" />

所有这一切都是让我的选择包装文本而不是项目:

enter image description here

任何帮助将不胜感激!提前致谢!

4 个答案:

答案 0 :(得分:2)

在微调器中设置此属性:

android:spinnerMode="dialog"

在文本视图中设置以下属性:

android:layout_weight="1"  
android:ellipsize="none"  
android:maxLines="100"  
android:scrollHorizontally="false"

答案 1 :(得分:1)

像这样创建一个 xml 文件,您的 xml 需要有一个父布局来包装 TextView。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<androidx.appcompat.widget.AppCompatTextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textColor="#333333"
    android:textSize="15sp"
    tools:text="123" />

</RelativeLayout>

确保你的 TextView 有一个 id,然后像这样创建你的适配器。

private ArrayAdapter<CharSequence> stringAdapter = new ArrayAdapter<>(context, R.layout.spinner_textview, R.id.textView, displayTexts);

使用这个构造函数

public ArrayAdapter(@NonNull Context context, @LayoutRes int resource,
        @IdRes int textViewResourceId, @NonNull List<T> objects) {
    this(context, resource, textViewResourceId, objects, false);
}

或任何以 textViewResourceId 作为参数的构造函数

就是这样。你不需要覆盖其他任何东西。 查看下图以查看效果。 enter image description here enter image description here

答案 2 :(得分:0)

尝试一下

我用简单的编码解决了这个问题。

在为Spinner分配适配器时,只需添加Android.Resource.Layout.SimpleExpandableListItem1,如下所示。

请检查更多 https://notostuck.blogspot.com/2020/08/how-to-populating-spinner-items-with.html

答案 3 :(得分:0)

这实际上对我有用(在Xamarin Android中,但问题是相同的):

代替

adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);

adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleExpandableListItem1);