Android 高手进阶教程:[10]PopupWindow
的有关信息介绍如下:![Android 高手进阶教程:[10]PopupWindow](/upload/jingyan/2025/1008/de76148d.jpg)
大家好,我们这一节讲的是AndroidPopupWindow的使用!在我理解其实
PopupWindow其实类似于一个不能动的Widget(仅从显示效果来说!)
它是浮在别的窗口之上的.
下面我将给大家做一个简单的Demo,类似于音乐播放器的Widget的效果,点击
Button的时候出来PopupWindow,首先我们看一下效果图:
下面是核心代码:
viewplaincopytoclipboardprint?
packagecom.android.tutor;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.Button;
importandroid.widget.PopupWindow;
publicclassPopupWindowDemoextends
OnClickListener{
privateButtonbtn;
Activity
implements
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
ContextmContext=PopupWindowDemo.this;
if(v.getId()==R.id.btn){
LayoutInflatermLayoutInflater=(LayoutInflater)
mContext
.getSystemService(LAYOUT_INFLATER_SERVICE);
Viewmusic_popunwindwow=mLayoutInflater.inflate(
R.layout.music_popwindow,null);
PopupWindowmPopupWindow=new
PopupWindow(music_popunwindwow,LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
mPopupWindow.showAtLocation(findViewById(R.id.main),
Gravity.RIGHT|Gravity.BOTTOM,0,0);
}
}
}
packagecom.android.tutor;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.Button;
importandroid.widget.PopupWindow;
publicclassPopupWindowDemoextendsActivityimplements
OnClickListener{
privateButtonbtn;
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
ContextmContext=PopupWindowDemo.this;
if(v.getId()==R.id.btn){
LayoutInflatermLayoutInflater=(LayoutInflater)mContext
.getSystemService(LAYOUT_INFLATER_SERVICE);
Viewmusic_popunwindwow=mLayoutInflater.inflate(
R.layout.music_popwindow,null);
PopupWindowmPopupWindow=newPopupWindow(music_popunwindwow,
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
mPopupWindow.showAtLocation(findViewById(R.id.main),
Gravity.RIGHT|Gravity.BOTTOM,0,0);
}
}
}
需要强调的是这里PopupWindow必须有某个事件触发才会显示出来,不然总会抱
错,不信大家可以试试!
随着这个问题的出现,就会同学问了,那么我想初始化让PopupWindow显示出来,
那怎么办了,不去寄托于其他点击事件,
在这里我用了定时器Timer来实现这样的效果,当然这里就要用到Handler了,
如果大家不理解的可以返回
Android高手进阶教程(九)之----AndroidHandler的使用!!看一看,加深了
解:
下面是核心代码:
viewplaincopytoclipboardprint?
packagecom.android.tutor;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.Gravity;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.PopupWindow;
publicclassPopupWindowDemoextendsActivity{
privateHandlermHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case1:
showPopupWindow();
break;
}
};
};
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//createthetimer
Timertimer=newTimer();
timer.schedule(newinitPopupWindow(),100);
}
privateclassinitPopupWindowextendsTimerTask{
@Override
publicvoidrun(){
Messagemessage=newMessage();
message.what=1;
mHandler.sendMessage(message);
}
}
publicvoidshowPopupWindow(){
ContextmContext=PopupWindowDemo.this;
LayoutInflatermLayoutInflater=(LayoutInflater)mContext
.getSystemService(LAYOUT_INFLATER_SERVICE);
Viewmusic_popunwindwow=mLayoutInflater.inflate(
R.layout.music_popwindow,null);
PopupWindowmPopupWindow=new
PopupWindow(music_popunwindwow,
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
mPopupWindow.showAtLocation(findViewById(R.id.main),
Gravity.CENTER,0,0);
}
}
packagecom.android.tutor;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.Gravity;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.PopupWindow;
publicclassPopupWindowDemoextendsActivity{
privateHandlermHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case1:
showPopupWindow();
break;
}
};
};
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//createthetimer
Timertimer=newTimer();
timer.schedule(newinitPopupWindow(),100);
}
privateclassinitPopupWindowextendsTimerTask{
@Override
publicvoidrun(){
Messagemessage=newMessage();
message.what=1;
mHandler.sendMessage(message);
}
}
publicvoidshowPopupWindow(){
ContextmContext=PopupWindowDemo.this;
LayoutInflatermLayoutInflater=(LayoutInflater)mContext
.getSystemService(LAYOUT_INFLATER_SERVICE);
Viewmusic_popunwindwow=mLayoutInflater.inflate(
R.layout.music_popwindow,null);
PopupWindowmPopupWindow=newPopupWindow(music_popunwindwow,
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
mPopupWindow.showAtLocation(findViewById(R.id.main),Gravity.CENTER,
0,0);
}
}
效果如下图:



