Android AutoCompleteTextView弹出窗口在显示后移动

2022-09-04 22:19:45

当我使用自动完成文本视图时,一切都很好,除了它不断在两个位置之间切换:正确的位置就在文本视图的正下方,并且相当低。它开始错误,但几乎立即移动到正确的位置。但是,在键入或反向间距时,这非常烦人,因为它发生在每个字母中。我正在使用安卓工作室。

看起来好像两个事件同时尝试决定布局。有时它会粘在一个位置或另一个位置。

**我使用自定义适配器减慢了过滤过程,看起来当输入文本时,它会移动到不正确的位置,然后当过滤完成时,它会移回正确的位置。

不對

Incorrect

正确:

Correct

java (in OnCreate())-

String[] drugs = new String[]{"Nexium","Amoxicillin","LEVOCETIRIZINE DIHYDROCHLORIDE", "Advil", "Advair Diskus", "Daraprim"};

    AutoCompleteTextView drugNameAutoComplete = ((AutoCompleteTextView) findViewById(R.id.drugNameEditText));
    drugNameAutoComplete.setAnimation(null);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,drugs);
    drugNameAutoComplete.setAdapter(adapter);

和布局代码-

<AutoCompleteTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/drugNameEditText"
            android:enabled="true"
            android:singleLine="true"
            android:layout_below="@+id/lookingForView"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:dropDownVerticalOffset="50dp"
            android:hint="@string/drug_name" />

如果我删除dropDownVeticalOffset,我会在正确的值和this之间闪烁 -

enter image description here


答案 1

要更改此位置,请使用 dropDownAnchor 属性并引用另一个视图 ID。(自动完成下的视图)

android:dropDownAnchor

用于将自动完成下拉列表定位到的视图。如果未指定,则使用文本视图本身。

并且您有许多下拉列表的属性。

最好使用实现 Filter 来自动完成适配器,并从自动完成的 OnQueryTextListener 传递输入的文本,并通过调用 adapter.getitem 来设置所选文本。


答案 2

将您的 xml 更改为 -

<AutoCompleteTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/drugNameEditText"
    android:enabled="true"
    android:singleLine="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    **android:dropDownVerticalOffset="0dp"**
    **android:dropDownAnchor="@id/drugNameEditText"**
    android:hint="drug" />

推荐