Android自带的下拉列表控件功能已经十分强大,但是看起来并不是十分美观,所以用Android的其它控件实现了一个定义的下拉菜单控件,看起来还可以,下面直接贴代码,相信都看得明白!

主界面activity:

package com.grus;import android.app.Activity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;import android.widget.ListView;import android.widget.PopupWindow;//主界面Activitypublic class SelectActivity extends Activity {// 下拉框依附组件private RelativeLayout parent;// 下拉框依附组件宽度,也将作为下拉框的宽度private int pwidth;// 文本框private EditText et, et1;// 下拉箭头图片组件private ImageView image, image1;// 展示所有下拉选项的ListViewprivate ListView listView = null;private String str1[] = { "北京", "上海", "广州" };private String str2[] = { "多媒体播放", "HDMI 1950*780", "北京高视" };// PopupWindow对象private PopupWindow selectPopupWindow = null;private OptionsAdapter optionsAdapter = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.select);}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);initWedget();}/** * 初始化界面控件 */private void initWedget() {// 初始化界面组件parent = (RelativeLayout) findViewById(R.id.parent);et = (EditText) findViewById(R.id.edittext);et1 = (EditText) findViewById(R.id.edittext1);et.setFocusable(false);// 禁止编辑框被编辑et1.setFocusable(false);// 禁止编辑框被编辑image = (ImageView) findViewById(R.id.btn_select);image1 = (ImageView) findViewById(R.id.btn_select1);// 获取下拉框依附的组件宽度pwidth = parent.getWidth();// 设置点击下拉箭头图片事件,点击弹出PopupWindow浮动下拉框image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initPopuWindow(et, str1);popupWindwShowing(et);}});image1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 初始化PopupWindowinitPopuWindow(et1, str2);// 显示PopupWindow窗口popupWindwShowing(et1);}});}/** * 初始化PopupWindow */private void initPopuWindow(final EditText et, final String str[]) {View loginwindow = (View) this.getLayoutInflater().inflate(R.layout.options, null);listView = (ListView) loginwindow.findViewById(R.id.list);// 设置自定义AdapteroptionsAdapter = new OptionsAdapter(this, str);listView.setAdapter(optionsAdapter);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View v, int position,long arg3) {et.setText(str[position]);selectPopupWindow.dismiss();}});selectPopupWindow = new PopupWindow(loginwindow, pwidth,LayoutParams.WRAP_CONTENT, true);selectPopupWindow.setOutsideTouchable(true);//当点击屏幕其他部分及Back键时PopupWindow消失selectPopupWindow.setBackgroundDrawable(new BitmapDrawable());}public void popupWindwShowing(View view) {selectPopupWindow.showAsDropDown(view, 0, -1);}}
自定义适配器:

package com.grus;import java.util.ArrayList;import android.app.Activity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;//自定义适配器Adapterpublic class OptionsAdapter extends BaseAdapter {    private Activity activity = null;     private String str[];    public OptionsAdapter(Activity activity,String str[]){    this.activity = activity;    this.str = str;    }@Overridepublic int getCount() {return str.length;}@Overridepublic Object getItem(int position) {return str[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null;         if (convertView == null) {             holder = new ViewHolder();             //下拉项布局            convertView = LayoutInflater.from(activity).inflate(R.layout.option_item, null);             holder.textView = (TextView) convertView.findViewById(R.id.item_text);             convertView.setTag(holder);         } else {             holder = (ViewHolder) convertView.getTag();         }          holder.textView.setText(str[position]);                      return convertView; }}class ViewHolder {     TextView textView; } 


布局XML文件:

select.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"    android:background="#EEEED1"    ><RelativeLayout android:id="@+id/parent" android:layout_width="wrap_content" android:layout_height="wrap_content"   android:layout_marginTop="50dp" android:layout_marginLeft="30dp"><EditText android:id="@+id/edittext" android:layout_width="200dp"  android:singleLine="true"    android:layout_height="40dp" android:background="@color/green" android:paddingLeft="3dp"/><ImageView android:id="@+id/btn_select" android:layout_width="30dp" android:layout_height="40dp" android:src="@drawable/select" android:scaleType="fitXY" android:background="@color/green"android:layout_toRightOf="@id/edittext"/><EditText android:id="@+id/edittext1" android:layout_width="200dp"  android:singleLine="true"    android:layout_height="40dp" android:background="@color/green" android:paddingLeft="3dp"    android:layout_below="@id/edittext" android:layout_alignLeft="@id/edittext"    android:layout_marginTop="30dp"/><ImageView android:id="@+id/btn_select1" android:layout_width="30dp" android:layout_height="40dp" android:src="@drawable/select" android:scaleType="fitXY" android:background="@color/green"android:layout_toRightOf="@id/edittext1" android:layout_marginTop="30dp"android:layout_below="@id/edittext"/></RelativeLayout></LinearLayout>
option_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#ffffff"    ><RelativeLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center_vertical"    android:minHeight="40dp"    ><TextView android:id="@+id/item_text"      android:layout_height="wrap_content"android:layout_width="fill_parent"android:paddingLeft="5dp" android:layout_alignParentLeft="true"></TextView></RelativeLayout></LinearLayout>
options.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="wrap_content"    android:gravity="center_horizontal"    ><ListView android:id="@+id/list" android:layout_width="fill_parent"    android:layout_height="wrap_content" android:cacheColorHint="#00000000"></ListView></LinearLayout>
效果图如下:
  















更多相关文章

  1. Android(安卓)入门系列文章
  2. Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三
  3. android 学习之listview
  4. Wifi模块—源码分析Wifi初始化(Android(安卓)P)
  5. Android(安卓)学习之路 之 第2组UI组件:TextView及其子类(十)
  6. Android(安卓)实现登录界面和功能实例
  7. Android(安卓)源码分析之旅3.4--onConfigurationChanged
  8. Android编译系统环境初始化过程分析
  9. android基础回顾(三)基础UI组件

随机推荐

  1. android安装app
  2. ch07 Android 回调方法
  3. Android客户端性能测试
  4. android 项目收获02
  5. android 代码创建快捷方式
  6. 【Android】Activity 生命周期详解
  7. android 多媒体框架
  8. android系统编译资料
  9. Android实现文本的展开收起
  10. android 把图变成灰色