Android實現仿QQ登錄可編輯下拉框_第1頁
Android實現仿QQ登錄可編輯下拉框_第2頁
Android實現仿QQ登錄可編輯下拉框_第3頁
Android實現仿QQ登錄可編輯下拉框_第4頁
Android實現仿QQ登錄可編輯下拉框_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Android實現仿QQ登錄可編輯下拉菜單在Android里,直接提供的Spinner控件雖然可以實現下拉菜單的效果,但其效果并不理想,很多時候我們需要類似手機QQ那樣既可以在文本框中直接輸入編輯文字,可以在下拉菜單中選中或者刪除菜單選項,并且下拉菜單并不是以遮罩整個手機屏幕方式,而是以浮動在屏幕上的效果出現。下面呢,就來實現一下這些效果。北京最后效果:此次主要以EdiTextPopupWindow、ListView及Adapter來實現這種下拉效果。具體實現步驟就不一步步詳細介紹了,直接貼完整代碼吧,注釋比較詳細,相信都能看得懂。Activity代碼:packagecom.zw.select

2、;importjava.util.ArrayList;importandroid.app.Activity;importandroid.graphics.drawable.BitmapDrawable;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Handler.Callback;importandroid.os.Message;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importand

3、roid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.LinearLayout.LayoutParams;importandroid.widget.ListView;importandroid.widget.PopupWindow;/主界面ActivityextendsActivityimplementsCallbackpublicclassSelectActivity/PopupWindow對象privatePopupWindowselectPopupWindow=null;/自定義Adapt

4、erprivateOptionsAdapteroptionsAdapter=null;/下拉框選項數據源privateArrayListdatas=newArrayList();/下拉框依附組件privateLinearLayoutparent;/下拉框依附組件寬度,也將作為下拉框的寬度privateintpwidth;/文本框privateEditTextet;/下拉箭頭圖片組件privateImageViewimage;/恢復數據源按鈕privateButtonbutton;/展示所有下拉選項的ListViewprivateListViewlistView=null;/用來處理選中或者刪除

5、下拉項消息privateHandlerhandler;/是否初始化完成標志privatebooleanflag=false;OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.select);/* 沒有在onCreate方法中調用initWedget(),而是在onWindowFocusChanged方法中調用,* 是因為initWedget()中需要獲取PopupWindow浮動下拉框依附的組件寬度,在onCreate方法中

6、是無法獲取到該寬度的* /OverridepublicvoidonWindowFocusChanged(booleanhasFocus)super.onWindowFocusChanged(hasFocus);while(!flag)initWedget();flag=true;*初始化界面控件*/privatevoidinitWedget()/初始化Handler,用來處理消息handler=newHandler(SelectActivity.this);/初始化界面組件parent=(LinearLayout)findViewById(R.id.parent);et=(EditText)f

7、indViewById(R.id.image=(ImageView)findViewById(R.id.edittext);btn_select);/獲取下拉框依附的組件寬度intwidth=parent.getWidth();pwidth=width;/設置點擊下拉箭頭圖片事件,點擊彈出PopupWindow浮動下拉框image.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)if(flag)/顯示PopupWindow窗口popupWindwShowing(););/初始化PopupWi

8、ndowinitPopuWindow();button=(Button)findViewById(R.id.refresh);/設置點擊事件,恢復下拉框列表數據,沒有什么作用,純粹是為了方便多看幾次效果而設置button.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)initDatas();optionsAdapter.notifyDataSetChanged(););/*初始化填充Adapter所用List數據*/privatevoidinitDatas()datas.clear();d

9、atas.add(北京);datas.add(,上海);datas.add(,廣州);datas.add(,深圳);datas.add(重慶);datas.add(,青島);datas.add(石家莊/*初始化PopupWindow*/privatevoidinitPopuWindow()initDatas();/PopupWindow浮動下拉框布局Viewloginwindow=options,null);list);(View)this.getLayoutInflater().inflate(R.layout.listView=(ListView)loginwindow.findViewB

10、yId(R.id./設置自定義AdapteroptionsAdapter=listView.setAdapter(newOptionsAdapter(thisoptionsAdapter);handler,datas);selectPopupWindow=newPopupWindow(loginwindow,pwidth,LayoutParams.WRAP_CONTENT,true);selectPopupWindow.setOutsideTouchable(true);/這一句是為了實現彈出PopupWindow后,當點擊屏幕其他部分及Back鍵時PopupWindow會消失,/沒有這一句則

11、效果不能出來,但并不會影響背景/本人能力極其有限,不明白其原因,還望高手、知情者指點一下selectPopupWindow.setBackgroundDrawable(newBitmapDrawable();/*顯示PopupWindow窗口*parampopupwindow*/publicvoidpopupWindwShowing()/將selectPopupWindow作為parent的下拉框顯示,并指定selectPopupWindow在Y方向上向上偏移3pix,/這是為了防止下拉框與文本框之間產生縫隙,影響界面美化/(是否會產生縫隙,及產生縫隙的大小,可能會根據機型、異吧,不太清楚)s

12、electPopupWindow.showAsDropDown(parent,0,-3);)Android系統(tǒng)版本不同而/*PopupWindow消失*/publicvoiddismiss()selectPopupWindow.dismiss。;/*處理Hander消息*/OverridepublicbooleanhandleMessage(Messagemessage)Bundledata=message.getData();switch(message.what)case1:/選中下拉項,下拉框消失intselIndex=data.getInt(et.setText(datas.get(s

13、elIndex);dismiss。;break;selIndex);case2:/移除下拉項數據intdelIndex=data.getInt(datas.remove(delIndex);/刷新下拉列表delIndex);optionsAdapterbreak;.notifyDataSetChanged();returnfalse自定義適配器Adapter代碼:packagecom.zw.select;importjava.util.ArrayList;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Ha

14、ndler;importandroid.os.Message;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.TextView;/自定義適配器AdapterpublicclassOptionsAdapterextendsBaseAdapterprivateArrayListlist=newArrayLi

15、st();privateActivityactivity=null;/*privateHandlerhandler;自定義構造方法paramactivityparamhandlerparamlist*/publicOptionsAdapter(Activityactivity,Handlerhandler,ArrayListlist)this.activity=activity;this.handler=handler;this.list=list;)OverridepublicintgetCount()returnlist.size();OverridepublicObjectgetItem

16、(intposition)returnlist.get(position);OverridepubliclonggetItemId(returnposition;intposition)OverridepublicViewgetView(parent)finalintposition,ViewconvertView,ViewGroupViewHolderholder=null;if(convertView=holder=newnull)ViewHolder();/下拉項布局convertView=LayoutInflater.from(activityholder.textView).infl

17、ate(R.layout.=(TextView)option_item,null);convertView.findViewById(R.id.holder.imageViewitem_text);=(ImageView)convertView.findViewById(R.id.delImage);convertView.setTag(holder);elseholder=(ViewHolder)convertView.getTag();holder.textView.setText(list.get(position);/為下拉框選項文字部分設置事件,最終效果是點擊將其文字填充到文本框ho

18、lder.textView.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)Messagemsg=Bundledata=newMessage();newBundle();/設置選中索引data.putInt(selIndex,position);msg.setData(data);msg.what=1;/發(fā)出消息handler.sendMessage(msg););/為下拉框選項刪除圖標部分設置事件,最終效果是點擊將該選項刪除holder.imageView.setOnClickListen

19、er(newView.OnClickListener()(OverridepublicvoidonClick(Viewv)Messagemsg=newMessage();Bundledata=newBundle();/設置刪除索引data.putInt(delIndex,position);msg.setData(data);msg.what=2;/發(fā)出消息handler.sendMessage(msg););returnconvertView;classViewHolderTextViewtextView;ImageViewimageView;主界面布局select.xml文件:LinearLayoutxmlns:android=android:layout_width=fill_parentandroid:layout_height=fill_parentandroid:background=#EEEED1PopupWindow浮動下拉框布局options.xml文件:android:layout_height

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論