Android AutoCompleteTextView DropDown位置

时间:2014-10-16 09:57:25

标签: android autocompletetextview

我使用以下代码进行自动完成,但是下拉项目位于AutoCompleteTextView之上。我希望它显示在AutoCompleteTextView下方。我怎样才能做到这一点?

package com.example.autocomplete;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class MainActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.activity_main);

         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                 android.R.layout.simple_list_item_1, COUNTRIES);
         AutoCompleteTextView textView = (AutoCompleteTextView)
                 findViewById(R.id.countries_list);
         textView.setAdapter(adapter);
     }

     private static final String[] COUNTRIES = new String[] {
         "Belgium","Belgam","Bellam", "France Belgium", "Italy", "Germany", "Spain"
     };
 }

的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <AutoCompleteTextView
        android:id="@+id/countries_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:dropDownHeight="100dp"
        android:ems="10"
        android:text="AutoCompleteTextView" >

        <requestFocus />
    </AutoCompleteTextView>

</RelativeLayout>

5 个答案:

答案 0 :(得分:8)

看起来这必须有效:

android:dropDownHeight="100dp"

在这里成立:https://stackoverflow.com/a/7648028/1723525

修改

我尝试了一个新的活动和下面显示的建议ara。也许你必须将dropDownHeight更改为150dp,因为你有marginTop为100dp。我猜dropDownHeight必须高于Y位置(=填充+边距)。如果有效,请告诉我。

答案 1 :(得分:6)

设置下拉列表的高度并在下拉列表和edittext之间设置空格。下拉列表将显示在dropdownanchor中的上方和下方视图中。高度= 200dp,下拉列表不会与键盘重叠。

                <RelativeLayout
                    android:id="@+id/dropdownAutoCompleteTextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingBottom="8dp"
                    android:paddingTop="8dp">
                    <AutoCompleteTextView
                        android:id="@+id/autoTextViewState"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:digits="@string/get_started_petname_digits"
                        android:dropDownAnchor="@+id/dropdownAutoCompleteTextView"
                        android:dropDownHeight="200dp"
                        android:hint="Colorado"
                        android:imeOptions="actionNext"
                        android:inputType="textEmailAddress|textCapWords"
                        android:maxLength="15"
                        android:nextFocusDown="@+id/editZipCode"/>
                </RelativeLayout>

答案 2 :(得分:2)

使用布局中android:dropDownAnchor上的android:dropDownHorizontalOffsetandroid:dropDownVerticalOffsetAutoCompleteTextView和其他人。有关详细信息AutocompleteTextView

答案 3 :(得分:0)

添加dropdownheight以及dropdownanchor,肯定会有效。

android:dropDownAnchor="@id/yourIdOfViewOnTop"
android:dropDownHeight="100dp"

答案 4 :(得分:0)

让我们了解如何呈现下拉视图。实际上,它是 PopupWindow ,它通过方法findDropDownPosition来确定位置(与View Archor相比在上方还是下方)。对这种方法的评论说:

  

将弹出窗口置于屏幕上。当弹出窗口太高时         为了适合锚点,将查找父滚动视图并向上滚动         回收空间。如果滚动不可能或不够,则弹出窗口         窗口在锚点上方移动。         定位结果放置在{@code outParams}中。

我已经搜索了数不清的日子,但是如果您想要处理下拉菜单的位置(我的情况在DialogFragment中),则没有任何解决方案真正起作用。 这是我在服务器工作几天后的经验,您可以(欺骗)代码来解决此问题:

  • 使用android:dropDownAnchor设置要显示的下拉菜单的锚点,它可以正常工作,但UI似乎太奇怪了
  • 再次使用setDropDownVerticalOffset(offset: Int)可以,但是同样,UI太奇怪了
  • android:dropDownHeight设置为高于(上方或下方)空间的高度,结果将与上方的两种方式相同