android - 微调器文本不适合其父级

标签 android android-spinner

我正在使用多行的 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>

图片示例:

enter image description here

适配器:

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
    }
}

项目 View :

<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>

最佳答案

您需要像这样更改您的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>

关于android - 微调器文本不适合其父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269283/

相关文章:

android - 如何将约束布局最小宽度设置为xml中另一个 View 的宽度

java - 如何在具有父子关系的微调器中添加项目?

android 监听应用程序启动

Android Front Camera翻转使用MediaRecorder录制的视频

android - 如何在android中使微调器背景透明?

java - 无法对基本类型 int 调用 findViewById(int)

android - 具有相同 ID 的微调器/如何以编程方式添加行

java - 将文本字段的值添加到数组中

android - 如何在同一个 fragment 中创建多个 Retrofit 回调 - android

android - 无法转换为 android.widget.RelativeLayout