package com.zw.select;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.PopupWindow;
public class SelectActivity extends Activity implements Callback {
//PopupWindow对象
private PopupWindow selectPopupWindow= null;
//自定义Adapter
private OptionsAdapter optionsAdapter = null;
//下拉框选项数据源
private ArrayList<String> datas = new ArrayList<String>();;
//下拉框依附组件
private LinearLayout parent;
//下拉框依附组件宽度,也将作为下拉框的宽度
private int pwidth;
//文本框
private EditText et;
//下拉箭头图片组件
private ImageView image;
//恢复数据源按钮
private Button button;
//展示所有下拉选项的ListView
private ListView listView = null;
//用来处理选中或者删除下拉项消息
private Handler handler;
//是否初始化完成标志
private boolean flag = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select);
}
/**
* 没有在onCreate方法中调用initWedget(),而是在onWindowFocusChanged方法中调用,
* 是因为initWedget()中需要获取PopupWindow浮动下拉框依附的组件宽度,在onCreate方法中是无法获取到该宽度的
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
while(!flag){
initWedget();
flag = true;
}
}
/**
* 初始化界面控件
*/
private void initWedget(){
//初始化Handler,用来处理消息
handler = new Handler(SelectActivity.this);
//初始化界面组件
parent = (LinearLayout)findViewById(R.id.parent);
et = (EditText)findViewById(R.id.edittext);
image = (ImageView)findViewById(R.id.btn_select);
//获取下拉框依附的组件宽度
int width = parent.getWidth();
pwidth = width;
//设置点击下拉箭头图片事件,点击弹出PopupWindow浮动下拉框
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
//显示PopupWindow窗口
popupWindwShowing();
}
}
});
//初始化PopupWindow
initPopuWindow();
button = (Button)findViewById(R.id.refresh);
//设置点击事件,恢复下拉框列表数据,没有什么作用,纯粹是为了方便多看几次效果而设置
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initDatas();
optionsAdapter.notifyDataSetChanged();
}
});
}
/**
* 初始化填充Adapter所用List数据
*/
private void initDatas(){
datas.clear();
datas.add("北京");
datas.add("上海");
datas.add("广州");
datas.add("深圳");
datas.add("重庆");
datas.add("青岛");
datas.add("石家庄");
}
/**
* 初始化PopupWindow
*/
private void initPopuWindow(){
initDatas();
//PopupWindow浮动下拉框布局
View loginwindow = (View)this.getLayoutInflater().inflate(R.layout.options, null);
listView = (ListView) loginwindow.findViewById(R.id.list);
//设置自定义Adapter
optionsAdapter = new OptionsAdapter(this, handler,datas);
listView.setAdapter(optionsAdapter);
selectPopupWindow = new PopupWindow(loginwindow, pwidth,LayoutParams.WRAP_CONTENT, true);
selectPopupWindow.setOutsideTouchable(true);
//这一句是为了实现弹出PopupWindow后,当点击屏幕其他部分及Back键时PopupWindow会消失,
//没有这一句则效果不能出来,但并不会影响背景
//本人能力极其有限,不明白其原因,还望高手、知情者指点一下
selectPopupWindow.setBackgroundDrawable(new BitmapDrawable());
}
/**
* 显示PopupWindow窗口
*
* @param popupwindow
*/
public void popupWindwShowing() {
//将selectPopupWindow作为parent的下拉框显示,并指定selectPopupWindow在Y方向上向上偏移3pix,
//这是为了防止下拉框与文本框之间产生缝隙,影响界面美化
//(是否会产生缝隙,及产生缝隙的大小,可能会根据机型、Android系统版本不同而异吧,不太清楚)
selectPopupWindow.showAsDropDown(parent,0,-3);
}
/**
* PopupWindow消失
*/
public void dismiss(){
selectPopupWindow.dismiss();
}
/**
* 处理Hander消息
*/
@Override
public boolean handleMessage(Message message) {
Bundle data = message.getData();
switch(message.what){
case 1:
//选中下拉项,下拉框消失
int selIndex = data.getInt("selIndex");
et.setText(datas.get(selIndex));
dismiss();
break;
case 2:
//移除下拉项数据
int delIndex = data.getInt("delIndex");
datas.remove(delIndex);
//刷新下拉列表
optionsAdapter.notifyDataSetChanged();
break;
}
return false;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
主要以EdiText、PopupWindow、ListView及Adapter来实现下拉效果,源码,如果没有资源分可以直接访问http://blog.csdn.net/zw_yuyan/article/details/7734736 完整的代码文档,或者我的bd文库http://wenku.baidu.com/view/caa5a34be518964bcf847c4b.html 文库,一个样啦!
资源推荐
资源详情
资源评论
收起资源包目录
SelectTest.rar (35个子文件)
SelectTest
.project 846B
default.properties 362B
bin
SelectTest.apk 52KB
com
zw
select
SelectActivity$2.class 932B
R$string.class 412B
R$layout.class 447B
R$drawable.class 501B
ViewHolder.class 383B
SelectActivity.class 5KB
R.class 496B
SelectActivity$1.class 870B
OptionsAdapter$2.class 1KB
R$attr.class 325B
OptionsAdapter$1.class 1KB
R$id.class 559B
OptionsAdapter.class 3KB
resources.ap_ 46KB
classes.dex 8KB
proguard.cfg 1KB
AndroidManifest.xml 681B
src
com
zw
select
OptionsAdapter.java 3KB
SelectActivity.java 5KB
res
values
strings.xml 179B
layout
options.xml 446B
option_item.xml 898B
select.xml 1KB
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
del.png 535B
background.png 33KB
bg1.png 526B
img1.png 719B
icon.png 3KB
.classpath 280B
gen
com
zw
select
R.java 1KB
assets
共 35 条
- 1
zw_yuyan
- 粉丝: 19
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页