Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示后移动Android AutoCompleteTextView弹出窗口_Java_Android_Xml_Android Studio - Fatal编程技术网

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

Java 显示后移动Android AutoCompleteTextView弹出窗口,java,android,xml,android-studio,Java,Android,Xml,Android Studio,当我使用autocompletetextview时,除了在两个位置之间切换外,其他一切都很好:正确的位置在textview的正下方,并且要低很多。它启动错误,但几乎立即移动到正确的位置。然而,这是非常恼人的打字或退格时,因为它发生在每一个字母。我正在使用android studio 似乎两个事件同时试图决定布局。有时它会粘在一个位置或另一个位置 **我用一个自定义适配器减慢了过滤过程,看起来当输入文本时,它会移到错误的位置,然后过滤完成后,它会移回正确的位置 不正确 正确: java(在On

当我使用autocompletetextview时,除了在两个位置之间切换外,其他一切都很好:正确的位置在textview的正下方,并且要低很多。它启动错误,但几乎立即移动到正确的位置。然而,这是非常恼人的打字或退格时,因为它发生在每一个字母。我正在使用android studio

似乎两个事件同时试图决定布局。有时它会粘在一个位置或另一个位置

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

不正确

正确:

java(在OnCreate()中)-

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事件中显式设置dropDownAnchordropDownVerticalOffsetdropDownHeight解决了这个问题

编辑:经过一些检查后,以棉花糖(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”


我希望它对你也有用

我试过了,什么也没有。我不确定过滤和布局有什么关系。这没有帮助。这些都是默认值,所以我看不出它们会有什么影响?不:(只是检查了一下,然后重命名了它,只是为了确定。试着指定一个高度?