Android 可输入下拉列表的实现

这篇博客介绍了如何在Android中实现一个可输入值的下拉列表,通过结合EditText、ImageView和PopupMenu来达到效果。首先,使用shape创建带有边框的EditText和ImageView,然后在代码中实现点击ImageView弹出PopupMenu,选择列表项并设置到EditText中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       Android有Spinner 实现下拉列表,但是却不可自己输入值。那么如何实现可输入下拉列表框的实现呢?可以采用EditText,ImageView(shape包装EditText,ImageView)和PopupMenu相结合的方式来实现。

    自己实现的Demo效果如下:

                                             //1.通过EditText,ImageView(shape包装EditText,ImageView)来实现界面。ImageView的图片是用的Android自带的图片ic_find_next_holo_light,如下:



 <LinearLayout 
       android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
       android:background="@drawable/bg_shape">

   <EditText
       android:id="@+id/et_ceshi"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:background="@null"
       android:height="35dp" />
   
   <ImageView
       android:id="@+id/iv_value"
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:layout_gravity="center_vertical"
       android:scaleType="fitXY"
       android:layout_marginTop="2dp"
       android:layout_marginBottom="2dp"
       android:paddingRight="2dp"
       android:src="@drawable/ic_find_next_holo_light"   

       android:background="#D3D3D3"
       />
   </LinearLayout>


       //2.shape的实现

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- 绘制图形颜色 -->
    <solid android:color="@android:color/white" />
     <!-- 绘制图形角度 -->
    <corners android:radius="0dp" />
    <!-- 描边 -->
<stroke android:width="2dp" android:color="#D3D3D3" />
    <!-- 绘制内边距 -->
    <padding android:left="4dp" />
</shape>


      //3.代码的实现

public class MainActivity extends Activity implements OnClickListener{
EditText  et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=(EditText) findViewById(R.id.et_ceshi);
ImageView iv=(ImageView) findViewById(R.id.iv_value);
iv.setOnClickListener(this);
}


@Override
public void onClick(View v) {
PopupMenu pm=new PopupMenu(MainActivity.this, et);
pm.getMenuInflater().inflate(R.menu.menu_ceshi, pm.getMenu());
pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {


@Override
public boolean onMenuItemClick(MenuItem item) {
et.setText(item.getTitle());
return false;
}
});
pm.show();
}
}

      //3.R.menu.menu_ceshi的实现

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/item01"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="南京"/>
    <item 
        android:id="@+id/item02"
        android:orderInCategory="101"
        android:showAsAction="never"
        android:title="马鞍山"/>
    <item 
        android:id="@+id/item03"
        android:orderInCategory="102"
        android:showAsAction="never"
        android:title="芜湖"/>
    <item 
        android:id="@+id/item04"
        android:orderInCategory="103"
        android:showAsAction="never"
        android:title="铜陵"/>


</menu>


      至此就实现了可输入下拉列表                   



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值