Android实现仿QQ登录可编辑下拉框文档格式.docx
- 文档编号:17530098
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:29.40KB
Android实现仿QQ登录可编辑下拉框文档格式.docx
《Android实现仿QQ登录可编辑下拉框文档格式.docx》由会员分享,可在线阅读,更多相关《Android实现仿QQ登录可编辑下拉框文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
privateOptionsAdapteroptionsAdapter=null;
//下拉框选项数据源
privateArrayList<
String>
datas=newArrayList<
();
;
//下拉框依附组件
privateLinearLayoutparent;
//下拉框依附组件宽度,也将作为下拉框的宽度
privateintpwidth;
//文本框
privateEditTextet;
//下拉箭头图片组件
privateImageViewimage;
//恢复数据源按钮
privateButtonbutton;
//展示所有下拉选项的ListView
privateListViewlistView=null;
//用来处理选中或者删除下拉项消息
privateHandlerhandler;
//是否初始化完成标志
privatebooleanflag=false;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.select);
}
/**
*没有在onCreate方法中调用initWedget(),而是在onWindowFocusChanged方法中调用,
*是因为initWedget()中需要获取PopupWindow浮动下拉框依附的组件宽度,在onCreate方法中是无法获取到该宽度的
*/
publicvoidonWindowFocusChanged(booleanhasFocus){
super.onWindowFocusChanged(hasFocus);
while(!
flag){
initWedget();
flag=true;
}
*初始化界面控件
privatevoidinitWedget(){
//初始化Handler,用来处理消息
handler=newHandler(SelectActivity.this);
//初始化界面组件
parent=(LinearLayout)findViewById(R.id.parent);
et=(EditText)findViewById(R.id.edittext);
image=(ImageView)findViewById(R.id.btn_select);
//获取下拉框依附的组件宽度
intwidth=parent.getWidth();
pwidth=width;
//设置点击下拉箭头图片事件,点击弹出PopupWindow浮动下拉框
image.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(flag){
//显示PopupWindow窗口
popupWindwShowing();
}
}
});
//初始化PopupWindow
initPopuWindow();
button=(Button)findViewById(R.id.refresh);
//设置点击事件,恢复下拉框列表数据,没有什么作用,纯粹是为了方便多看几次效果而设置
button.setOnClickListener(newView.OnClickListener(){
initDatas();
optionsAdapter.notifyDataSetChanged();
*初始化填充Adapter所用List数据
privatevoidinitDatas(){
datas.clear();
datas.add("
北京"
);
datas.add("
上海"
广州"
深圳"
重庆"
青岛"
石家庄"
*初始化PopupWindow
*/
privatevoidinitPopuWindow(){
initDatas();
//PopupWindow浮动下拉框布局
Viewloginwindow=(View)this.getLayoutInflater().inflate(R.layout.options,null);
listView=(ListView)loginwindow.findViewById(R.id.list);
//设置自定义Adapter
optionsAdapter=newOptionsAdapter(this,handler,datas);
listView.setAdapter(optionsAdapter);
selectPopupWindow=newPopupWindow(loginwindow,pwidth,LayoutParams.WRAP_CONTENT,true);
selectPopupWindow.setOutsideTouchable(true);
//这一句是为了实现弹出PopupWindow后,当点击屏幕其他部分及Back键时PopupWindow会消失,
//没有这一句则效果不能出来,但并不会影响背景
//本人能力极其有限,不明白其原因,还望高手、知情者指点一下
selectPopupWindow.setBackgroundDrawable(newBitmapDrawable());
}
*显示PopupWindow窗口
*
*@parampopupwindow
publicvoidpopupWindwShowing(){
//将selectPopupWindow作为parent的下拉框显示,并指定selectPopupWindow在Y方向上向上偏移3pix,
//这是为了防止下拉框与文本框之间产生缝隙,影响界面美化
//(是否会产生缝隙,及产生缝隙的大小,可能会根据机型、Android系统版本不同而异吧,不太清楚)
selectPopupWindow.showAsDropDown(parent,0,-3);
*PopupWindow消失
publicvoiddismiss(){
selectPopupWindow.dismiss();
*处理Hander消息
publicbooleanhandleMessage(Messagemessage){
Bundledata=message.getData();
switch(message.what){
case1:
//选中下拉项,下拉框消失
intselIndex=data.getInt("
selIndex"
et.setText(datas.get(selIndex));
dismiss();
break;
case2:
//移除下拉项数据
intdelIndex=data.getInt("
delIndex"
datas.remove(delIndex);
//刷新下拉列表
returnfalse;
}
自定义适配器Adapter代码:
importandroid.view.LayoutInflater;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.TextView;
//自定义适配器Adapter
publicclassOptionsAdapterextendsBaseAdapter{
list=newArrayList<
privateActivityactivity=null;
*自定义构造方法
*@paramactivity
*@paramhandler
*@paramlist
publicOptionsAdapter(Activityactivity,Handlerhandler,ArrayList<
list){
this.activity=activity;
this.handler=handler;
this.list=list;
publicintgetCount(){
returnlist.size();
publicObjectgetItem(intposition){
returnlist.get(position);
publiclonggetItemId(intposition){
returnposition;
publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){
ViewHolderholder=null;
if(convertView==null){
holder=newViewHolder();
//下拉项布局
convertView=LayoutInflater.from(activity).inflate(R.layout.option_item,null);
holder.textView=(TextView)convertView.findViewById(R.id.item_text);
holder.imageView=(ImageView)convertView.findViewById(R.id.delImage);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
holder.textView.setText(list.get(position));
//为下拉框选项文字部分设置事件,最终效果是点击将其文字填充到文本框
holder.textView.setOnClickListener(newView.OnClickListener(){
Messagemsg=newMessage();
Bundledata=newBundle();
//设置选中索引
data.putInt("
position);
msg.setData(data);
msg.what=1;
//发出消息
handler.sendMessage(msg);
//为下拉框选项删除图标部分设置事件,最终效果是点击将该选项删除
holder.imageView.setOnClickListener(newView.OnClickListener(){
//设置删除索引
msg.what=2;
returnconvertView;
classViewHolder{
TextViewtextView;
ImageViewimageView;
}
主界面布局select.xml文件:
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
LinearLayoutxmlns:
android="
android:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
background="
#EEEED1"
>
LinearLayoutandroid:
id="
@+id/parent"
wrap_content"
horizontal"
layout_marginTop="
50dp"
layout_marginLeft="
30dp"
EditTextandroid:
@+id/edittext"
200dp"
singleLine="
true"
40dp"
@drawable/bg1"
paddingLeft="
3dp"
/>
ImageViewandroid:
@+id/btn_select"
src="
@drawable/img1"
scaleType="
fitXY"
/LinearLayout>
Buttonandroid:
@+id/refresh"
45dp"
text="
恢复"
textColor="
#000000"
textSize="
20sp"
PopupWindow浮动下拉框布局options.xml文件:
gravity="
center_horizontal"
ListViewandroid:
@+id/list"
cacheColorHint="
#00000000"
/ListView>
下拉选项布局option_item.xml文件:
#235654"
RelativeLayout
center_vertical"
minHeight="
@+id/delImage"
20dp"
@drawable/del"
18sp"
layout_alignParentRight="
layout_marginRight="
10dp"
TextViewandroid:
@+id/item_text"
layout_toLeftOf="
@id/delImage"
5dp"
layout_alignParentLeft="
/TextView>
/RelativeLayout>
到此代码及布局文件基本都贴完了。
哦,对了,我是在Android2.2测试运行的。
本人对Android学习、了解十分有限,而且各种文件、变量、方法等等命名也很不规范,所以代码肯定有很多不足之处,还请各位海涵!
当然,更希望各位能不吝赐教,本人将满怀荣幸与感激!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 实现 QQ 登录 编辑 下拉