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è),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論