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"
/>
</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>
至此就实现了可输入下拉列表