android:PopupWindow的使用

[size=medium] 项目中要用到PopupWindow。查了一下用法,并做了一个简单的demo,用于备份。

android中的控件都具有很好的扩展性,这里的PopupWindow中可以放置自定义的view,用法简单而方便。
[/size]

public class MainActivity extends Activity {

static final String TAG = "MainActivity";

private List<Map<String, String>> list = new ArrayList<Map<String, String>>();
private int state, state1;
private Button button, button1;
private ListView menulist;
private View layout;
private PopupWindow pop, pop1;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 初始化数据List
initPopListData();

button = (Button)findViewById(R.id.button);
button1 = (Button)findViewById(R.id.button1);
button.setOnClickListener(listener);
button1.setOnClickListener(listener);
}

private OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {

if ( v.getId() == R.id.button )
{
if (state == 1 && pop.isShowing())
{
state = 0;
pop.dismiss();
}
else {
// 放置自定义的view
layout = MainActivity.this.getLayoutInflater()
.inflate(R.layout.pop, null);
menulist = (ListView) layout.findViewById(R.id.menulist);
SimpleAdapter listAdapter = new SimpleAdapter(
MainActivity.this, list, R.layout.menu_item,
new String[] { "menuItemName" },
new int[] { R.id.menuitem });
menulist.setAdapter(listAdapter);

/**
* layout PopupWindow所显示的界面
* myButton.getWidth() 设置PopupWindow宽度
* myButton.getHeight() * 3 + 5 设置PopupWindow宽度高度
*/
pop = new PopupWindow(
layout,
button.getWidth(),
button.getHeight() * 3 + 5);

// 设置背景
ColorDrawable cd = new ColorDrawable(-0000);
pop.setBackgroundDrawable(cd);

pop.update();
pop.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
pop.setTouchable(true); // 设置popupwindow可点击
pop.setOutsideTouchable(true); // 设置popupwindow外部可点击
pop.setFocusable(true); //获取焦点
/*设置popupwindow的位置*/
pop.showAtLocation(layout,
(Gravity.BOTTOM - button.getHeight())
| Gravity.LEFT, 0, 2 * button.getHeight());
state = 1;
pop.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
/*
* 如果点击了popupwindow的外部,popupwindow也会消失.
* 这是PopupWindow的重要特性
*/
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
pop.dismiss();
return true;
}
return false;
}
});
// 点击listview中item的处理
menulist.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
switch (arg2) {
case 0:
Toast.makeText(getApplicationContext(), "系统设置",
Toast.LENGTH_SHORT).show();
pop.dismiss();
break;
case 1:
Toast.makeText(getApplicationContext(), "自动更新",
Toast.LENGTH_SHORT).show();
pop.dismiss();
break;
case 2:
Toast.makeText(getApplicationContext(), "关于",
Toast.LENGTH_SHORT).show();
pop.dismiss();
break;
case 3:
Toast.makeText(getApplicationContext(), "搜索",
Toast.LENGTH_SHORT).show();
pop.dismiss();
break;
case 4:
Toast.makeText(getApplicationContext(), "退出",
Toast.LENGTH_SHORT).show();
pop.dismiss();
break;
}
}
});
}
}
else if ( v.getId() == R.id.button1)
{
if (state1 == 1 && pop1.isShowing())
{
state1 = 0;
pop1.dismiss();
}
else {
layout = getLayoutInflater().inflate(R.layout.pop1,
null);
((ImageView)layout.findViewById(R.id.image))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "image",
Toast.LENGTH_SHORT).show();
pop1.dismiss();
}
});
((ImageView)layout.findViewById(R.id.image1))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "image1",
Toast.LENGTH_SHORT).show();
pop1.dismiss();
}
});
pop1 = new PopupWindow(layout, 150, 80);

ColorDrawable cd = new ColorDrawable(Color.RED);
pop1.setBackgroundDrawable(cd);
pop1.update();
pop1.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
pop1.setTouchable(true);
pop1.setOutsideTouchable(true);
pop1.setFocusable(true);
pop1.showAtLocation(layout,
(Gravity.BOTTOM - button.getHeight())
| Gravity.LEFT, 0, 2 * button.getHeight());
state1 = 1;
pop1.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
pop1.dismiss();
return true;
}
return false;
}
});
}
}

}
};

private void initPopListData()
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("menuItemName", "系统设置");
list.add(map);

map = new HashMap<String, String>();
map.put("menuItemName", "自助更新");
list.add(map);

map = new HashMap<String, String>();
map.put("menuItemName", "关于");
list.add(map);

map = new HashMap<String, String>();
map.put("menuItemName", "搜索");
list.add(map);

map = new HashMap<String, String>();
map.put("menuItemName", "退出");
list.add(map);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值