Android带下拉列表的EditText

21

我有一个EditText,用户可以在其中输入值。我想添加一个选项,允许用户在单击EditText时通过下拉列表选择不同的选项。有没有人知道如何实现?

以下是EditText代码:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:ems="10"
    android:id="@+id/dish_quantity"
    android:layout_below="@+id/dish_name"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:hint="Quantity" />

我希望它看起来像这样:

输入图像描述


在安卓中,那被称为AutoCompleteTextView。 - sadegh saati
5个回答

29

我认为这是您的要求:

只需按照此示例操作: Xml:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >   
<AutoCompleteTextView
    android:id="@+id/languages"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"></AutoCompleteTextView>
</LinearLayout>

活动:

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

public class MainActivity extends Activity {

    String[] languages = { "C","C++","Java","C#","PHP","JavaScript","jQuery","AJAX","JSON" };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
                //Create Array Adapter
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.select_dialog_singlechoice, languages);
                //Find TextView control
        AutoCompleteTextView acTextView = (AutoCompleteTextView) findViewById(R.id.languages);
        //Set the number of characters the user must type before the drop down list is shown
                acTextView.setThreshold(1);
                //Set the adapter
        acTextView.setAdapter(adapter);
    }
}

演示:

输入图像描述


我只是不想在EditText中输入,而是希望在单击EditText时从列表中获取一个值。有没有办法做到这一点? - faisal iqbal
首先,您的日期选择器不是一个EditText,所以为什么您想要一个EditText下拉框。 - RaMeSh
使用弹出菜单,创建包含您项目的菜单,然后在主活动中填充该菜单,然后重写onMenuItemClick方法,通过在不同项目的ID上使用switch语句,可以根据您的需求设置EditText视图。希望您能理解我的解释。 - Fahadi Muhumuza

7
我认为你所需要的可以通过使用Spinner而不是EditText来实现。
这里有详细说明如何使用它。

这应该是被接受的答案。 - GeneCode

6

activity_main.xml

<RelativeLayout xmlns:androclass="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=".MainActivity" >  

    <TextView  
        android:id="@+id/textView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentLeft="true"  
        android:layout_alignParentTop="true"  
        android:layout_marginTop="15dp"  
        android:text="@string/what_is_your_favourite_programming_language_" />  

    <AutoCompleteTextView  
        android:id="@+id/autoCompleteTextView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentLeft="true"  
        android:layout_below="@+id/textView1"  
        android:layout_marginLeft="36dp"  
        android:layout_marginTop="17dp"  
        android:ems="10"  
        android:text="">  

        <requestFocus />  
    </AutoCompleteTextView>  

</RelativeLayout>

MainActivity.java

import android.os.Bundle;  
import android.app.Activity;  
import android.graphics.Color;  
import android.view.Menu;  
import android.widget.ArrayAdapter;  
import android.widget.AutoCompleteTextView;  

public class MainActivity extends Activity {  
    String[] language ={"C","C++","Java",".NET","iPhone","Android","ASP.NET","PHP"};  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        //Creating the instance of ArrayAdapter containing list of language names  
           ArrayAdapter<String> adapter = new ArrayAdapter<String>  
            (this,android.R.layout.select_dialog_item,language);  
        //Getting the instance of AutoCompleteTextView  
           AutoCompleteTextView actv= (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);  
           actv.setThreshold(1);//will start working from first character  
           actv.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView  
           actv.setTextColor(Color.RED);  

    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.activity_main, menu);  
        return true;  
    }  

}  

不,它不是在ListView中的AutoCompleteTextView,只有选定的值存在。 - faisal iqbal
抱歉,我没听懂你的意思。请详细说明。 - Shishir Shetty
您是否希望用户在选择项目后仍然可以编辑内容? - Shishir Shetty
当我点击EditText时,它会显示像图片中显示的月份列表。 - faisal iqbal
如果您想添加例如尾随清除文本图标等内容,那个确实非常有效。非常好! - Pietrek

4

0
我发现了一种使用MaterialAutoCompleteTextView和TextInputLayout的方法。只需将TextInputLayout的endIconMode设置为“dropdown_menu”,并将ArrayAdapter设置为AutoCompleteTextView即可。
            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/til_module"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:endIconMode="dropdown_menu">

                <com.google.android.material.textfield.MaterialAutoCompleteTextView
                    android:id="@+id/et_module"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="module"
                    android:padding="16dp"
                    android:text="text" />

            </com.google.android.material.textfield.TextInputLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接