Android实现仿QQ登录可编辑下拉框_第1页
Android实现仿QQ登录可编辑下拉框_第2页
Android实现仿QQ登录可编辑下拉框_第3页
Android实现仿QQ登录可编辑下拉框_第4页
Android实现仿QQ登录可编辑下拉框_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android实现仿QQ登录可编辑下拉菜单在Android里,直接提供的Spinner控件虽然可以实现下拉菜单的效果, 但其 效果并不理想,很多时候我们需要类似手机 QQ那样既可以在文本框中直接输入 编辑文字,可以在下拉菜单中选中或者删除菜单选项,并且下拉菜单并不是以遮罩整个手机屏幕方式,而是以浮动在屏幕上的效果出现。 下面呢,就来实现一下 这些效果。北京最后效果:此次主要以EdiText PopupWindow、ListView及Adapter来实现这种下拉效 果。具体实现步骤就不一步步详细介绍了,直接贴完整代码吧,注释比较详细, 相信都能看得懂。Activity 代码:packagecom

2、.zw.select;importjava.util.ArrayList;importimportimportimportimportimportimportimportimportimportimportimportimportimportandroid.app.Activity;android.graphics.drawable.BitmapDrawable;android.os.Bundle;android.os.Handler;android.os.Handler.Callback;android.os.Message;android.view.View;android.widget.

3、Button;android.widget.EditText;android.widget.ImageView;android.widget.LinearLayout;android.widget.LinearLayout.LayoutParams;android.widget.ListView;android.widget.PopupWindow;extends Activityimplements Callback / 主界面 Activitypublic class SelectActivity/PopupWindow 对象private PopupWindow selectPopupW

4、indow = null ;/自定义Adapterprivate OptionsAdapter optionsAdapter = null ;/下拉框选项数据源private ArrayList<String>datas = new ArrayList<String>();/下拉框依附组件private LinearLayout parent ;/下拉框依附组件宽度,也将作为下拉框的宽度private int pwidth ;/文本框private EditText et ;/下拉箭头图片组件private ImageView image ;/恢复数据源按钮privat

5、e Button button ;/展示所有下拉选项的ListViewprivate ListView listView = null ;/用来处理选中或者删除下拉项消息private Handler handler ;/是否初始化完成标志private boolean flag = false ;Overridepublic void onCreate(Bundle savedInstanceState) super .onCreate(savedInstanceState); setContentView(R.layout.select );/* 没有在 onCreate 方法中调用 in

6、itWedget(),而是在 onWindowFocusChanged 方法中调用,*是因为initWedget()中需要获取PopupWindow浮动下拉框依附的组件宽度,在onCreate 方法中是无法获取到该宽度的*/Overridepublic void onWindowFocusChanged( boolean hasFocus) super .onWindowFocusChanged(hasFocus); while (! flag ) initWedget(); flag = true ;*初始化界面控件*/private void initWedget()(/初始化Handle

7、r, 用来处理消息handler = new Handler(SelectActivity.this );parent );edittext );btn_select );/初始化界面组件parent = (LinearLayout)findViewById(R.id.et = (EditText)findViewById(R.id.image = (ImageView)findViewById(R.id./获取下拉框依附的组件宽度int width = parent .getWidth();pwidth = width;/设置点击下拉箭头图片事件,点击弹出PopupWindow浮动下拉框im

8、age .setOnClickListener(new View.OnClickListener() (Overridepublic void onClick(View v) (if (flag )(/ 显示 PopupWindow 窗口popupWindwShowing(););/ 初始化 PopupWindowinitPopuWindow();button = (Button)findViewById(R.id.refresh );/设置点击事件,恢复下拉框列表数据,没有什么作用,纯粹是为了方便多看几次效 果而设置button .setOnClickListener(new View.On

9、ClickListener() (Override public void onClick(View v) ( initDatas();optionsAdapter .notifyDataSetChanged(););/*初始化填充Adapter所用List数据*/private void initDatas()(datas.clear();datas.add("北京");datas.add("上海");datas.add("广升1");datas.add("深圳1");datas.add("重庆&quo

10、t;);datas.add("青岛");datas.add("白家庄");/* 初始化 PopupWindow*/private void initPopuWindow()(i nitDatas();/ /PopupWindow浮动下拉框布局options , null );list );View loginwindow =(View) this .getLayoutInflater().inflate(R.layout.listView = (ListView) loginwindow.findViewById(R.id./设置自定义Adapter o

11、ptionsAdapter = listView .setAdapter(new OptionsAdapter( thisoptionsAdapter );handler , datas );)selectPopupWindow=new PopupWindow(loginwindow, pwidth ,LayoutParams. WRAP_CONTENT, true );selectPopupWindow .setOutsideTouchable(true );/这一句是为了实现弹出PopupWindow 后,当点击屏幕其他部分及Back键时PopupWindow 会消失,/没有这一句则效果不

12、能出来,但并不会影响背景/本人能力极其有限,不明白其原因,还望高手、知情者指点一下selectPopupWindow .setBackgroundDrawable(new BitmapDrawable();/* 显示 PopupWindow 窗口* param popupwindow*/public void popupWindwShowing() (/ 将selectPopupWindow作为 parent的下拉框显示,并指定 selectPopupWindow在Y方向上向上偏移 3pix ,/这是为了防止下拉框与文本框之间产生缝隙,影响界面美化/ (是否会产生缝隙,及产生缝隙的大小,可能会

13、根据机型、 Android系统版本不同而异吧,不太清楚)selectPopupWindow .showAsDropDown( parent ,0,-3);* PopupWindow 消失*/public void dismiss()(selectPopupWindow .dismiss();/* 处理Hander消息*/Overridepublic boolean handleMessage(Message message) (Bundle data = message.getData();switch (message. what )(case 1:/选中下拉项,下拉框消失);int sel

14、lndex = data.getInt("sellndex"et .setText( datas .get(sellndex);dismiss();break ;case 2:/移除下拉项数据int dellndex = data.getlnt("dellndex"datas .remove(dellndex);/刷新下拉列表optionsAdapter .notifyDataSetChanged();break ;returnfalse自定义适配器Adapter代码:packagecom.zw.select;importjava.util.ArrayL

15、ist;importimportimportimportimportimportimportimportimportimportandroid.app.Activity;android.os.Bundle;android.os.Handler;android.os.Message;android.view.LayoutInflater;android.view.View;android.view.ViewGroup;android.widget.BaseAdapter;android.widget.ImageView;android.widget.TextView;/自定义适配器Adapter

16、publicclass OptionsAdapterextends BaseAdapter private ArrayList<String>list = new ArrayList<String>();private Activity activity = null ;private Handler handler ;*自定义构造方法*param activity*param handler*param list*/public OptionsAdapter(Activity activity,Handler handler,ArrayList<String&g

17、t; list)t his . activity = activity;t his . handler = handler;t his . list = list;)Overridepublic int getCount() returnlist .size();Overridepublic Object getItem(return list .get(position);intposition) (Overridepublic long getItemId(return position;intposition) (Overridepublic View getView( parent)

18、(finalint position, View convertView, ViewGroupViewHolder holder =null ;if (convertView =holder = newnull ) ( ViewHolder();/下拉项布局convertView =LayoutInflater. from (activityholder. textView).inflate(R.layout.=(TextView)option_item , null );convertView.findViewById(R.id.holder. imageViewitem_text );=(

19、ImageView)convertView.findViewById(R.id.delImage );convertView.setTag(holder);) else (holder = (ViewHolder) convertView.getTag();holder. textView .setText( list .get(position);/为下拉框选项文字部分设置事件,最终效果是点击将其文字填充到文本框holder. textView .setOnClickListener(new View.OnClickListener()Overridepublic void onClick(

20、View v) (Message msg =Bundle data =new Message();new Bundle();/设置选中索引data.putInt( msg.setData(data); msg. what = 1;"selIndex" , position);/发出消息handler .sendMessage(msg););/为下拉框选项删除图标部分设置事件,最终效果是点击将该选项删除holder. imageView .setOnClickListener(new View.OnClickListener()(Override public void on

21、Click(View v) ( Message msg =new Message();Bundle data =new Bundle();/设置删除索引 data.putInt( "delIndex" , position); msg.setData(data); msg. what = 2; /发出消息 handler .sendMessage(msg); );returnconvertView;class ViewHolder (TextView textView ;ImageView imageView ;主界面布局select.xml文件:<? xml ver

22、sion ="1.0" encoding ="utf-8”?><LinearLayoutxmlns:android = "= "vertical"="fill_parent"= "fill_parent"= "#EEEED1"android:orientation android:layout_width android:layout_height android:background< LinearLayout android:layout_widthan

23、droid:id= "+id/parent"= "wrap_content"android:layout_heightandroid:orientation= "wrap_content"="horizontal"android:layout_marginTop= "50dp"android:layout_marginLeft< EditText android:id="30dp"= "+id/edittext"android:layout_widt

24、h="200dp"android:singleLine= "true"android:layout_height android:paddingLeft= "40dp"="3dp" />android:background= "drawable/bg1"<ImageView android:id= "+id/btn_select"android:layout_width="30dp"android:layout_heightandroid:sr

25、c= "40dp" ="drawable/img1"android:scaleType="fitXY"/></ LinearLayout >< Button android:id= "+id/refresh"android:layout_width="wrap_content"android:layout_heightandroid:text="恢复"= "45dp"android:textColor="#000000&q

26、uot;android:textSize="20sp"android:layout_marginTop="30dp"android:layout_marginLeft</ LinearLayout >= "30dp" />PopupWindow浮动下拉框布局options.xml 文件:<? xml version ="1.0" encoding="utf-8"?>< LinearLayoutxmlns:android= "android:orien

27、tation= "vertical"android:layout_widthandroid:layout_height="fill_parent"= "wrap_content"android:gravity>= "centerhorizontal"< ListView android:idandroid:layout_heightandroid:cacheColorHint= "+id/list" android:layout_width= "wrap_content&q

28、uot;="#00000000">= "fill_parent"</ ListView ></ LinearLayout下拉选项布局<? xml version< LinearLayoutoption_item.xml 文件:= "1.0" encoding ="utf-8”?>xmlns:android= "android:layout_width android:layout_height android:background>< RelativeLayout android:layout_width android:layout_height android:gravity android:minHeigh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论