Android實(shí)現(xiàn)仿QQ登錄可編輯下拉框_第1頁(yè)
Android實(shí)現(xiàn)仿QQ登錄可編輯下拉框_第2頁(yè)
Android實(shí)現(xiàn)仿QQ登錄可編輯下拉框_第3頁(yè)
Android實(shí)現(xiàn)仿QQ登錄可編輯下拉框_第4頁(yè)
Android實(shí)現(xiàn)仿QQ登錄可編輯下拉框_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2、om.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.widge

3、t.Button;android.widget.EditText;android.widget.ImageView;android.widget.LinearLayout;android.widget.LinearLayout丄ayoutParams;android.widget.ListView;android.widget.PopupWindow;/主界面 ActivitypublicclassSelectActivityextendsActivityimplementsCallback北京/PopupWindow 對(duì)象privatePopupWindowselectPopupWindow

4、=null;/自定義 AdapterprivateOptionsAdapteroptionsAdapter=null;/下拉框選項(xiàng)數(shù)據(jù)源privateArrayListvStringdatas=newArrayListvString();/下拉框依附組件privateLinearLayoutparent;/下拉框依附組件寬度,也將作為下拉框的寬度privateintpwidth;/文本框privateEditTextet;/下拉箭頭圖片組件privateImageViewimage;/恢復(fù)數(shù)據(jù)源按鈕privateButtonbutton;/展示所有下拉選項(xiàng)的 ListViewprivateLi

5、stViewlistView=null;/用來(lái)處理選中或者刪除下拉項(xiàng)消息privateHandlerhandler;/是否初始化完成標(biāo)志privatebooleanflag=false;OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.select);/*沒(méi)有在 onCreate 方法中調(diào)用 initWedget(),而是在 onWindowFocusChanged中調(diào)用,*是因?yàn)?initWedget()中需要獲取 Pop

6、upWindow 浮動(dòng)下拉框依附的組件寬度,在onCreate 方法中是無(wú)法獲取到該寬度的*/OverridepublicvoidonWindowFocusChanged(booleanhasFocus)super.onWindowFocusChanged(hasFocus);while(!flag)initWedget();方法flag=true;*初始化界面控件*/privatevoidinitWedget()/初始化 Handler,用來(lái)處理消息handler=newHandler(SelectActivity.this);/初始化界面組件parent=(LinearLayout)fin

7、dViewById(R.id.et=(EditText)findViewById(R.id.image=(ImageView)findViewById(R.id./獲取下拉框依附的組件寬度intwidth=parent.getWidth();pwidth=width;/設(shè)置點(diǎn)擊下拉箭頭圖片事件,點(diǎn)擊彈出 PopupWindow 浮動(dòng)下拉框image.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)if(flag)/顯示 PopupWindow 窗口 popupWindwShowing();)

8、;/初始化 PopupWindowinitPopuWindow();button=(Button)findViewById(R.id.refresh);/設(shè)置點(diǎn)擊事件,恢復(fù)下拉框列表數(shù)據(jù),沒(méi)有什么作用,純粹是為了方便多看幾次效果而設(shè)置button.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)initDatas();optionsAdapter.notifyDataSetChanged(););parent);edittext);btn_select);/這一句是為了實(shí)現(xiàn)彈岀 PopupW

9、indow 后,當(dāng)點(diǎn)擊屏幕其他部分及 Back 鍵時(shí)PopupWindow 會(huì)消失,/沒(méi)有這一句則效果不能岀來(lái),但并不會(huì)影響背景/本人能力極其有限,不明白其原因,還望高手、知情者指點(diǎn)一下selectPopupWindow.setBackgroundDrawable(newBitmapDrawable();*初始化填充 Adapter 所用 List 數(shù)據(jù)*/privatevoidinitDatas()datas.clear();datas.add(datas.add(datas.add(datas.add(datas.add(datas.add(datas.add(北京);上海);廣州“);深

10、圳);重慶);青島);石家莊)/*初始化 PopupWindow*/privatevoidinitPopuWindow()initDatas();/PopupWindow 浮動(dòng)下拉框布局Viewloginwindow=(View)this.getLayoutlnflater().inflate(R.layout.options,null);listView=(ListView)loginwindow.findViewById(R.id.list);/設(shè)置自定義 AdapteroptionsAdapter=newOptionsAdapter(thislistView.setAdapter(opt

11、ionsAdapter);handler,datas);selectPopupWindow=newPopupWindow(loginwindow,pwidth 丄 ayoutParams.WRAP_CONTENT,true);selectPopupWindow.setOutsideTouchable(true);*顯示 PopupWindow 窗口*parampopupwindow*/publicvoidpopupWindwShowing()/將 selectPopupWindow 作為 parent 的下拉框顯示,并指定 selectPopupWindow在丫方向上向上偏移 3pix,/這是

12、為了防止下拉框與文本框之間產(chǎn)生縫隙,影響界面美化/(是否會(huì)產(chǎn)生縫隙,及產(chǎn)生縫隙的大小,可能會(huì)根據(jù)機(jī)型、Android 系統(tǒng)版本不同而異吧,不太清楚)selectPopupWindow.showAsDropDown(parent,0,-3);*PopupWindow 消失*/publicvoiddismiss()selectPopupWindow.dismiss。;/*處理 Hander 消息*/OverridepublicbooleanhandleMessage(Messagemessage)Bundledata=message.getData();switch(message.what)ca

13、se1:/選中下拉項(xiàng),下拉框消失intsellndex=data.getlnt(sellndex);et.setText(datas.get(sellndex);dismiss();break;case2:/移除下拉項(xiàng)數(shù)據(jù)intdellndex=data.getlnt(dellndex);datas.remove(dellndex);/刷新下拉列表optionsAdapter.notifyDataSetChanged();break;自定義適配器 Adapter 代碼:packagecom.zw.select;importjava.util.ArrayList;importimportimpo

14、rtimportimportimportimportimportimportimportandroid.app.Activity;android.os.Bundle;android.os.Handler;android.os.Message;android.view.Layoutlnflater;android.view.View;android.view.ViewGroup;android.widget.BaseAdapter;android.widget.ImageView;android.widget.TextView;/自定義適配器 AdapterpublicclassOptionsA

15、dapterprivateArrayListvStringlist=newArrayListvString();privateActivityactivity=null;privateHandlerhandler;自定義構(gòu)造方法paramactivityparamhandlerparamlistpublicOptionsAdapter(Activityactivity,Handlerhandler,ArrayListlist)this.activity=activity;this.handler=handler;this.list=list;returnfalseextendsBaseAdap

16、ter*/OverridepublicintgetCount()OverridepublicObjectgetItem(intposition)returnlist.get(position);Overridepubliclonggetltemld(intreturnposition;OverridepublicViewgetView(finalparent)ViewHolderholder=null;if(convertView=null)holder=newViewHolder();/下拉項(xiàng)布局convertView=holder.textView=(TextView)convertVie

17、w.findViewByld(R.id.holder.imageViewconvertView.findViewByld(R.id.convertView.setTag(holder);elseholder=(ViewHolder)convertView.getTag();holder.textView.setText(list.get(position);/為下拉框選項(xiàng)文字部分設(shè)置事件,最終效果是點(diǎn)擊將其文字填充到文本框holder.textView.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(V

18、iewv)Messagemsg=newMessage();Bundledata=newBundle();/設(shè)置選中索引data.putInt(selIndex,position);msg.setData(data);msg.what=1;/發(fā)出消息handler.sendMessage(msg);returnlist.size();LayoutInflater.from(activity).inflate(R.layout.option_item,null);position)intposition.ViewconvertView,ViewGroupitem_text);=(ImageView)delImage););/為下拉框選項(xiàng)刪除圖標(biāo)部分設(shè)置事件,最終效果是點(diǎn)擊將該選項(xiàng)刪除holder.imageView.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)Messagemsg=newMessage();Bundledata=newBundle();/設(shè)置刪除索引data.putInt(delIndex,position);msg.setData(data);msg.what=2;/發(fā)出消息handler.sendMessage(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論