Java 显示后移动Android AutoCompleteTextView弹出窗口
当我使用autocompletetextview时,除了在两个位置之间切换外,其他一切都很好:正确的位置在textview的正下方,并且要低很多。它启动错误,但几乎立即移动到正确的位置。然而,这是非常恼人的打字或退格时,因为它发生在每一个字母。我正在使用android studio 似乎两个事件同时试图决定布局。有时它会粘在一个位置或另一个位置 **我用一个自定义适配器减慢了过滤过程,看起来当输入文本时,它会移到错误的位置,然后过滤完成后,它会移回正确的位置 不正确 正确: java(在OnCreate()中)-Java 显示后移动Android AutoCompleteTextView弹出窗口,java,android,xml,android-studio,Java,Android,Xml,Android Studio,当我使用autocompletetextview时,除了在两个位置之间切换外,其他一切都很好:正确的位置在textview的正下方,并且要低很多。它启动错误,但几乎立即移动到正确的位置。然而,这是非常恼人的打字或退格时,因为它发生在每一个字母。我正在使用android studio 似乎两个事件同时试图决定布局。有时它会粘在一个位置或另一个位置 **我用一个自定义适配器减慢了过滤过程,看起来当输入文本时,它会移到错误的位置,然后过滤完成后,它会移回正确的位置 不正确 正确: java(在On
String[]drugs=新的String[]{“耐信”、“阿莫西林”、“盐酸左西替利嗪”、“阿维地尔”、“阿维代尔磁盘”、“达拉普利”};
AutoCompleteTextView drugNameAutoComplete=((AutoCompleteTextView)findViewById(R.id.drugNameEditText));
drugNameAutoComplete.setAnimation(null);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,药品);
drugNameAutoComplete.setAdapter(适配器);
和布局代码-
<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" />
要更改此位置,请使用dropDownAnchor属性并引用另一个视图id。
(在“自动完成”下查看)
android:dropDownAnchor
视图以将自动完成下拉列表定位到。如果未指定,则使用文本视图本身
您有许多下拉列表属性
您最好使用ImplementFilter来自动完成适配器,并从autocomplete的OnQueryTextListener传递输入的文本,然后通过调用adapter.getitem来设置所选文本 将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" />
您是否在另一个AutoCompleteTextView上使用了相同的id?我可以通过包含两个具有相同id的视图来重现您描述的行为。出于某种原因,我在使用最新API时遇到了相同的问题。我通过在XML和ContextChanged事件中显式设置dropDownAnchor、dropDownVerticalOffset和dropDownHeight解决了这个问题
编辑:经过一些检查后,以棉花糖(API 23)开头的API之间的这种行为似乎不一致。尝试将代码更改为以下内容:
final float scale = context.getResources().getDisplayMetrics().density;
int verticalOffsetDP;
int dropDownHeightDP = (int) (200 * scale + 0.5f);
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
if (currentApiVersion < Build.VERSION_CODES.M)
{
// Prior to Marshmallow DropDownVerticalOffset works as expected
verticalOffset = 0;
}
else
{
// Marshmallow has some weird DropDownVerticalOffset behavior so we have to compensate
verticalOffset = (int) (50 * scale + 0.5f);
}
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);
drugNameAutoComplete.setDropDownAnchor(R.id.drugNameEditText);
drugNameAutoComplete.setDropDownVerticalOffset(verticalOffsetDP);
drugNameAutoComplete.setDropDownHeight(dropDownHeightDP);
<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:dropDownAnchor="@id/drugNameEditText"
android:dropDownHeight="200dp"
android:hint="@string/drug_name" />
final float scale=context.getResources().getDisplayMetrics().density;
国际垂直偏移量;
整数下降高度dp=(整数)(200*刻度+0.5f);
int currentApiVersion=android.os.Build.VERSION.SDK\u int;
if(当前APIVersion
并将您的XML转换为以下内容:
final float scale = context.getResources().getDisplayMetrics().density;
int verticalOffsetDP;
int dropDownHeightDP = (int) (200 * scale + 0.5f);
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
if (currentApiVersion < Build.VERSION_CODES.M)
{
// Prior to Marshmallow DropDownVerticalOffset works as expected
verticalOffset = 0;
}
else
{
// Marshmallow has some weird DropDownVerticalOffset behavior so we have to compensate
verticalOffset = (int) (50 * scale + 0.5f);
}
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);
drugNameAutoComplete.setDropDownAnchor(R.id.drugNameEditText);
drugNameAutoComplete.setDropDownVerticalOffset(verticalOffsetDP);
drugNameAutoComplete.setDropDownHeight(dropDownHeightDP);
<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:dropDownAnchor="@id/drugNameEditText"
android:dropDownHeight="200dp"
android:hint="@string/drug_name" />
您必须设置dropDownHeight的原因是,如果列表超出视图的高度边界,Android会将其推到屏幕顶部,从而使移动问题更加复杂。如果您确实不介意(有些人不介意,这取决于您的视图设置),您可以从编程和XML中删除dropDownHeight
我应该注意到,这些更改仍然不能使棉花糖和其他API之间的内容完全相同。看起来仍然存在一些像素差异。但它变得非常接近。我也遇到了同样的问题,过了太多小时,我找到了解决办法
您应该更改:
android:layout\u width=“wrap\u content”
到android:layout\u width=“match\u parent”
我希望它对你也有用 我试过了,什么也没有。我不确定过滤和布局有什么关系。这没有帮助。这些都是默认值,所以我看不出它们会有什么影响?不:(只是检查了一下,然后重命名了它,只是为了确定。试着指定一个高度?