[size=medium] 项目中要用到PopupWindow。查了一下用法,并做了一个简单的demo,用于备份。
android中的控件都具有很好的扩展性,这里的PopupWindow中可以放置自定义的view,用法简单而方便。
[/size]
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);
}
}