Android AutoCompleteTextView长建议文本完整显示问题及代码咨询
嘿,这个问题我太清楚了!你确实需要修改布局——准确来说是修改下拉建议项的布局,因为你当前用的系统默认布局是单行的,会直接截断长文本,没法实现自动换行的效果。
为什么当前方案不行?
你代码里的ArrayAdapter用的是系统自带的android.R.layout.simple_dropdown_item_1line布局,这个布局里的TextView是强制单行显示的(默认singleLine="true"),哪怕你给AutoCompleteTextView本身设置了maxLines="2",那也只控制输入框的显示,下拉列表里的每一项还是会被这个单行布局限制住,长文本自然没法换行。
具体修改步骤
1. 创建自定义下拉项布局
在res/layout目录下新建一个布局文件,比如命名为dropdown_item_multiline.xml,内容如下:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="8dp" android:paddingHorizontal="16dp" android:textSize="16sp" android:maxLines="2" android:ellipsize="end" android:singleLine="false" />
注意:这里必须用
@android:id/text1作为TextView的ID,因为ArrayAdapter默认会寻找这个ID的控件来绑定数据。
2. 修改适配器的布局引用
把你代码里初始化ArrayAdapter的那一行,替换成自定义布局:
原来的代码:
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,values);
修改后:
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.dropdown_item_multiline,values);
3. 保留现有AutoCompleteTextView的设置
你当前activity_main.xml里的AutoCompleteTextView配置已经很合理了(singleLine="false"、maxLines="2"),这个不需要改动,它负责控制输入框本身的文本显示。
额外优化提示
如果想要下拉项支持显示更多行数,只需要把自定义布局里的android:maxLines改成更大的数值(比如3),或者直接去掉这个属性(默认不限行数),文本就会自动换行适配内容。
内容的提问来源于stack exchange,提问作者Epson Axel Leiva Paez

