您的位置首页百科知识

Android 高手进阶教程:[10]PopupWindow

Android 高手进阶教程:[10]PopupWindow

的有关信息介绍如下:

Android 高手进阶教程:[10]PopupWindow

大家好,我们这一节讲的是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);

}

}

效果如下图: