版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)。下面呢,就來實(shí)現(xiàn)一下這些效果。北京最后效果:此次主要以EdiTextPopupWindow、ListView及Adapter來實(shí)現(xiàn)這種下拉效果。具體實(shí)現(xiàn)步驟就不一步步詳細(xì)介紹了,直接貼完整代碼吧,注釋比較詳細(xì),相信都能看得懂。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對(duì)象privatePopupWindowselectPopupWindow=null;/自定義Adapt
4、erprivateOptionsAdapteroptionsAdapter=null;/下拉框選項(xiàng)數(shù)據(jù)源privateArrayListdatas=newArrayList();/下拉框依附組件privateLinearLayoutparent;/下拉框依附組件寬度,也將作為下拉框的寬度privateintpwidth;/文本框privateEditTextet;/下拉箭頭圖片組件privateImageViewimage;/恢復(fù)數(shù)據(jù)源按鈕privateButtonbutton;/展示所有下拉選項(xiàng)的ListViewprivateListViewlistView=null;/用來處理選中或者刪除
5、下拉項(xiàng)消息privateHandlerhandler;/是否初始化完成標(biāo)志privatebooleanflag=false;OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.select);/* 沒有在onCreate方法中調(diào)用initWedget(),而是在onWindowFocusChanged方法中調(diào)用,* 是因?yàn)閕nitWedget()中需要獲取PopupWindow浮動(dòng)下拉框依附的組件寬度,在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;/設(shè)置點(diǎn)擊下拉箭頭圖片事件,點(diǎn)擊彈出PopupWindow浮動(dòng)下拉框image.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)if(flag)/顯示PopupWindow窗口popupWindwShowing(););/初始化PopupWi
8、ndowinitPopuWindow();button=(Button)findViewById(R.id.refresh);/設(shè)置點(diǎn)擊事件,恢復(fù)下拉框列表數(shù)據(jù),沒有什么作用,純粹是為了方便多看幾次效果而設(shè)置button.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)initDatas();optionsAdapter.notifyDataSetChanged(););/*初始化填充Adapter所用List數(shù)據(jù)*/privatevoidinitDatas()datas.clear();d
9、atas.add(北京);datas.add(,上海);datas.add(,廣州);datas.add(,深圳);datas.add(重慶);datas.add(,青島);datas.add(石家莊/*初始化PopupWindow*/privatevoidinitPopuWindow()initDatas();/PopupWindow浮動(dòng)下拉框布局Viewloginwindow=options,null);list);(View)this.getLayoutInflater().inflate(R.layout.listView=(ListView)loginwindow.findViewB
10、yId(R.id./設(shè)置自定義AdapteroptionsAdapter=listView.setAdapter(newOptionsAdapter(thisoptionsAdapter);handler,datas);selectPopupWindow=newPopupWindow(loginwindow,pwidth,LayoutParams.WRAP_CONTENT,true);selectPopupWindow.setOutsideTouchable(true);/這一句是為了實(shí)現(xiàn)彈出PopupWindow后,當(dāng)點(diǎn)擊屏幕其他部分及Back鍵時(shí)PopupWindow會(huì)消失,/沒有這一句則
11、效果不能出來,但并不會(huì)影響背景/本人能力極其有限,不明白其原因,還望高手、知情者指點(diǎn)一下selectPopupWindow.setBackgroundDrawable(newBitmapDrawable();/*顯示PopupWindow窗口*parampopupwindow*/publicvoidpopupWindwShowing()/將selectPopupWindow作為parent的下拉框顯示,并指定selectPopupWindow在Y方向上向上偏移3pix,/這是為了防止下拉框與文本框之間產(chǎn)生縫隙,影響界面美化/(是否會(huì)產(chǎn)生縫隙,及產(chǎn)生縫隙的大小,可能會(huì)根據(jù)機(jī)型、異吧,不太清楚)s
12、electPopupWindow.showAsDropDown(parent,0,-3);)Android系統(tǒng)版本不同而/*PopupWindow消失*/publicvoiddismiss()selectPopupWindow.dismiss。;/*處理Hander消息*/OverridepublicbooleanhandleMessage(Messagemessage)Bundledata=message.getData();switch(message.what)case1:/選中下拉項(xiàng),下拉框消失intselIndex=data.getInt(et.setText(datas.get(s
13、elIndex);dismiss。;break;selIndex);case2:/移除下拉項(xiàng)數(shù)據(jù)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;自定義構(gòu)造方法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();/下拉項(xiàng)布局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);/為下拉框選項(xiàng)文字部分設(shè)置事件,最終效果是點(diǎn)擊將其文字填充到文本框ho
18、lder.textView.setOnClickListener(newView.OnClickListener()OverridepublicvoidonClick(Viewv)Messagemsg=Bundledata=newMessage();newBundle();/設(shè)置選中索引data.putInt(selIndex,position);msg.setData(data);msg.what=1;/發(fā)出消息handler.sendMessage(msg););/為下拉框選項(xiàng)刪除圖標(biāo)部分設(shè)置事件,最終效果是點(diǎn)擊將該選項(xiàng)刪除holder.imageView.setOnClickListen
19、er(newView.OnClickListener()(OverridepublicvoidonClick(Viewv)Messagemsg=newMessage();Bundledata=newBundle();/設(shè)置刪除索引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浮動(dòng)下拉框布局options.xml文件:android:layout_height
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校體育教研室計(jì)劃
- 中學(xué)安全工作計(jì)劃范文
- 2025年行政人事部年度工作計(jì)劃目標(biāo)
- 2025年教師個(gè)人提高工作計(jì)劃范文
- 地產(chǎn)公司專題計(jì)劃代理部組織管理新規(guī)制度
- 2025年集采工作計(jì)劃
- “訪民情、惠民生、聚民心”活動(dòng)對(duì)口幫扶計(jì)劃
- 《血液科護(hù)理查房》課件
- 《fxhx絡(luò)合滴定法》課件
- 跳繩合同書家庭
- 2024-2030年中國(guó)無人機(jī)(UAV)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- (高立牌)SC型施工升降機(jī)說明書
- 母嬰購(gòu)貨合同范本
- 茶葉風(fēng)味科學(xué)-制茶與評(píng)茶智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 光的偏振課件
- 生活中的金融學(xué)智慧樹知到期末考試答案章節(jié)答案2024年山東理工大學(xué)
- 2024年江蘇鹽城高中物理學(xué)業(yè)水平合格考試卷試題(含答案詳解)
- 上海財(cái)經(jīng)大學(xué)碩士論文封面模板(含論文標(biāo)準(zhǔn)格式)
- 體育專業(yè)學(xué)生學(xué)情分析總結(jié)報(bào)告
- 城鄉(xiāng)居民醫(yī)療保險(xiǎn)
- 碳酸鋰生產(chǎn)工藝流程
評(píng)論
0/150
提交評(píng)論