微调器文本不适合其父级

Spinner text doesn't fit to its parent

我正在使用 Spinner,它是多行的,但我遇到了父边框问题。

我希望行为类似于 TextView 或任何其他 View。如果它的 wrap_content (高度),如果从下拉列表中选择多行选项,它应该改变它的高度。但它不起作用,部分文本被切成两半并隐藏在父项后面。

<LinearLayout
                    android:id="@+id/spinnerLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="50dp"
                    android:orientation="vertical"
                    android:layout_marginTop="6dp"
                    android:layout_marginBottom="6dp"
                    android:paddingEnd="8dp"
                    android:background="@drawable/spinner_background_ok"
                    android:gravity="center">

                    <Spinner
                        android:id="@+id/spinner"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:focusable="true"
                        android:focusableInTouchMode="true"
                        app:errorEnabled="true"
                        android:overlapAnchor="false"
                        android:spinnerMode="dropdown"
                        android:singleLine="false"/>

                </LinearLayout>

图片示例:

适配器:

class SpinnerAdapter(private val a: Activity, resource: Int, private val optionList: MutableList<Item>) :
    ArrayAdapter<Item>(a, resource, optionList) {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        return customView(position, parent)
    }

    override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
        return customView(position, parent)
    }

    private fun customView(position: Int, parent: ViewGroup): View {
        val customItemView = a.layoutInflater.inflate(R.layout.spinner_item, parent, false)
        val currentlyPicked = optionList[position]
        val optionString = customItemView?.findViewById<TextView>(R.id.option)
        optionString?.isSingleLine = false
        optionString?.text = currentlyPicked.getName()
        if (position == count) optionString?.setTextColor(ContextCompat.getColor(a, R.color.Grey))
        else name?.setTextColor(ContextCompat.getColor(a, R.color.Black))

        return customItemView
    }

    override fun getCount(): Int {
        val count = super.getCount()
        return if (count > 0) count - 1 else count
    }
}

项目视图:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/option"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/normal"
        android:layout_gravity="center_vertical"
        android:padding="10dp"
        android:textSize="16sp"
        android:text="Option"/>

</LinearLayout>

删除 android:minHeight="50dp" 并在 Spinner.

中设置 android:layout_height="wrap_content"

您需要像这样更改 spinner_item

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  // do not fix the height of this layout.
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/option"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/normal"
        android:layout_gravity="center_vertical"
        android:padding="10dp"
        android:textSize="16sp"
        android:text="Option"/>

</LinearLayout>