【问题标题】:Android - Unexpected layout of the AutoCompleteTextViewAndroid - AutoCompleteTextView 的意外布局
【发布时间】:2021-10-27 14:10:53
【问题描述】:

我尝试在片段中添加带有自定义适配器的 AutoCompleteTextView。

问题是下拉列表底部有一个空白区域。 空白似乎与结果有关:结果越多,空白就越大。

这是我的代码:

AutoCompleteTextViewAdapter.kt

class AutoCompleteTextViewAdapter(private val c: Context, @LayoutRes private val layoutResource: Int, private val nameList: Array<NameList>) :
ArrayAdapter<NameList>(c, layoutResource, nameList) {

var filteredNames: List<NameList> = listOf()

override fun getCount(): Int = filteredNames.size


override fun getItem(position: Int): NameList = filteredNames[position]

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    val view = convertView ?: LayoutInflater.from(c).inflate(layoutResource, null, false)
    view.tvId.text = filteredNames[position].id.toString()
    view.tvName.text = filteredNames[position].name

    return view
}

override fun getFilter(): Filter {
    return object : Filter() {
        override fun publishResults(charSequence: CharSequence?, filterResults: FilterResults) {
            @Suppress("UNCHECKED_CAST")
            filteredNames = filterResults.values as List<NameList>

            notifyDataSetChanged()
        }

        override fun performFiltering(charSequence: CharSequence?): FilterResults {
            val queryString = charSequence?.toString()?.toLowerCase()

            val filterResults = FilterResults()
            filterResults.values =
                nameList.filter {
                    it.name.toLowerCase().contains(queryString.toString()) || it.id.toString().contains(queryString.toString())
                }
            return filterResults
        }
    }
}

item_list.xml

<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/margin">

<TextView
    android:id="@+id/tvId"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textSize="12sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/tvName"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:textSize="16sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tvId" />
</androidx.constraintlayout.widget.ConstraintLayout>

fragment.xml

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/name_label"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:hint="Name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <AutoCompleteTextView
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="54dp"
            android:inputType="textAutoComplete|textCapWords"
            android:paddingStart="16dp"
            android:singleLine="true"
            android:textSize="16sp" />

</com.google.android.material.textfield.TextInputLayout>

Fragment.kt

val Names = arrayOf( NameList(1001,"David"), NameList(1002, "Johnson"), NameList(1013, "Kevin"))
val adapter = AutoCompleteTextViewAdapter(requireActivity().getApplicationContext(),  R.layout.item_list, Names)

val textView = binding.Name as AutoCompleteTextView
textView.threshold = 1
textView.setAdapter(adapter)

【问题讨论】:

    标签: android kotlin autocomplete autocompletetextview


    【解决方案1】:

    尝试在item_list.xml中将约束布局的高度更改为wrap_content。

    <androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/margin">
    

    【讨论】:

    • 改变高度不起作用。但是我尝试使用 LinearLayout 而不是 ConstraintLayout 并且它有效!无论如何,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2017-09-19
    相关资源
    最近更新 更多