




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Android 實現(xiàn)仿 QQ 登錄可編輯下拉菜單在 Android 里,直接提供的 Spinner 控件雖然可以實現(xiàn)下拉菜單的效果,但其效果并不理想,很多時候我們需要類似手機(jī) QQ 那樣既可以在文本框中直接輸入編輯文字,可以在下拉菜單中選中或者刪除菜單選項,并且下拉菜單并不是以遮罩整個手機(jī)屏幕方式,而是以浮動在屏幕上的效果出現(xiàn)。下面呢,就來實現(xiàn)一下這些效果。最后效果:此次主要以 EdiTex、PopupWindow、ListView 及 Adapter 來實現(xiàn)這種下拉效果。具體實現(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 對象privatePopupWindowselectPopupWindow
4、=null;/自定義 AdapterprivateOptionsAdapteroptionsAdapter=null;/下拉框選項數(shù)據(jù)源privateArrayListvStringdatas=newArrayListvString();/下拉框依附組件privateLinearLayoutparent;/下拉框依附組件寬度,也將作為下拉框的寬度privateintpwidth;/文本框privateEditTextet;/下拉箭頭圖片組件privateImageViewimage;/恢復(fù)數(shù)據(jù)源按鈕privateButtonbutton;/展示所有下拉選項的 ListViewprivateLi
5、stViewlistView=null;/用來處理選中或者刪除下拉項消息privateHandlerhandler;/是否初始化完成標(biāo)志privatebooleanflag=false;OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.select);/*沒有在 onCreate 方法中調(diào)用 initWedget(),而是在 onWindowFocusChanged中調(diào)用,*是因為 initWedget()中需要獲取 Pop
6、upWindow 浮動下拉框依附的組件寬度,在onCreate 方法中是無法獲取到該寬度的*/OverridepublicvoidonWindowFocusChanged(booleanhasFocus)super.onWindowFocusChanged(hasFocus);while(!flag)initWedget();方法flag=true;*初始化界面控件*/privatevoidinitWedget()/初始化 Handler,用來處理消息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 浮動下拉框image.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)if(flag)/顯示 PopupWindow 窗口 popupWindwShowing();)
8、;/初始化 PopupWindowinitPopuWindow();button=(Button)findViewById(R.id.refresh);/設(shè)置點(diǎn)擊事件,恢復(fù)下拉框列表數(shù)據(jù),沒有什么作用,純粹是為了方便多看幾次效果而設(shè)置button.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)initDatas();optionsAdapter.notifyDataSetChanged(););parent);edittext);btn_select);/這一句是為了實現(xiàn)彈岀 PopupW
9、indow 后,當(dāng)點(diǎn)擊屏幕其他部分及 Back 鍵時PopupWindow 會消失,/沒有這一句則效果不能岀來,但并不會影響背景/本人能力極其有限,不明白其原因,還望高手、知情者指點(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 浮動下拉框布局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)生縫隙,影響界面美化/(是否會產(chǎn)生縫隙,及產(chǎn)生縫隙的大小,可能會根據(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:/選中下拉項,下拉框消失intsellndex=data.getlnt(sellndex);et.setText(datas.get(sellndex);dismiss();break;case2:/移除下拉項數(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();/下拉項布局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);/為下拉框選項文字部分設(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););/為下拉框選項刪除圖標(biāo)部分設(shè)置事件,最終效果是點(diǎn)擊將該選項刪除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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于企業(yè)戰(zhàn)略之績效管理體系-培訓(xùn)課件
- 教育培訓(xùn)分析報告
- 密閉式靜脈輸液操作流程
- 店頭團(tuán)購會活動運(yùn)營手冊
- 情境教學(xué)寫作指導(dǎo)課件
- 2025年高考物理二輪復(fù)習(xí)備考策略講座
- 工作安全場所管制
- 包茂高速43車連撞教育
- 北師大版三年級下冊數(shù)學(xué)第三單元乘法標(biāo)準(zhǔn)檢測卷(含答案)
- 小學(xué)家委會工作總結(jié)
- 小學(xué)語法專項-be動詞練習(xí)(含答案)
- 招標(biāo)代理服務(wù)應(yīng)急預(yù)案
- 霞浦縣沙江水閘除險加固工程環(huán)境影響報告
- 區(qū)塊鏈原理與實踐- 課件 第10章以太坊
- 智慧酒店數(shù)字智能化整體解決方案
- 技術(shù)通知單(新模版-0516)
- 餐飲從業(yè)人員晨檢表
- US-52交流電機(jī)調(diào)速控制器
- 關(guān)鍵崗位計劃方案
- 智慧養(yǎng)老綜合解決方案PPT
- 排球運(yùn)動活動PPT
評論
0/150
提交評論