Android高手進(jìn)階教程(十)之----Android PopupWindow的使用!
大家好,我們這一節(jié)講的是Android PopupWindow的使用! 在我理解其實(shí)PopupWindow其實(shí)類似于一個不能動的Widget(僅從顯示效果來說!)
它是浮在別的窗口之上的.
下面我將給大家做一個簡單的Demo,類似于音樂播放器的Widget的效果,點(diǎn)擊Button的時候出來PopupWindow,首先我們看一下效果圖:
下面是核心代碼:
[java]?view plaincopy package?com.android.tutor;???import?android.app.Activity;???import?android.content.Context;???import?android.os.Bundle;???import?android.view.Gravity;???import?android.view.LayoutInflater;???import?android.view.View;???import?android.view.View.OnClickListener;???import?android.view.ViewGroup.LayoutParams;???import?android.widget.Button;???import?android.widget.PopupWindow;???public?class?PopupWindowDemo?extends?Activity??implements?OnClickListener{???????private?Button?btn;??????????????public?void?onCreate(Bundle?savedInstanceState)?{???????????super.onCreate(savedInstanceState);???????????setContentView(R.layout.main);??????????????????????btn?=?(Button)findViewById(R.id.btn);???????????btn.setOnClickListener(this);???????}???????@Override??????public?void?onClick(View?v)?{???????????Context?mContext?=?PopupWindowDemo.this;???????????if?(v.getId()?==?R.id.btn)?{???????????????LayoutInflater?mLayoutInflater?=?(LayoutInflater)?mContext???????????????????????.getSystemService(LAYOUT_INFLATER_SERVICE);???????????????View?music_popunwindwow?=?mLayoutInflater.inflate(???????????????????????R.layout.music_popwindow,?null);???????????????PopupWindow?mPopupWindow?=?new?PopupWindow(music_popunwindwow,?LayoutParams.FILL_PARENT,???????????????????????LayoutParams.WRAP_CONTENT);??????????????????????????????mPopupWindow.showAtLocation(findViewById(R.id.main),?Gravity.RIGHT|Gravity.BOTTOM,?0,?0);???????????}???????}???}???? ?
需要強(qiáng)調(diào)的是這里PopupWindow必須有某個事件觸發(fā)才會顯示出來,不然總會抱錯,不信大家可以試試!
隨著這個問題的出現(xiàn),就會同學(xué)問了,那么我想初始化讓PopupWindow顯示出來,那怎么辦了,不去寄托于其他點(diǎn)擊事件,
在這里我用了定時器Timer來實(shí)現(xiàn)這樣的效果,當(dāng)然這里就要用到Handler了,如果大家不理解的可以返回
[c-sharp]?view plaincopy Android?高手進(jìn)階教程(九)之----Android?Handler的使用!!?看一看,加深了解:?? ?
下面是核心代碼:
[java]?view plaincopy package?com.android.tutor;???import?java.util.Timer;???import?java.util.TimerTask;???import?android.app.Activity;???import?android.content.Context;???import?android.os.Bundle;???import?android.os.Handler;???import?android.os.Message;???import?android.view.Gravity;???import?android.view.LayoutInflater;???import?android.view.View;???import?android.view.ViewGroup.LayoutParams;???import?android.widget.PopupWindow;???public?class?PopupWindowDemo?extends?Activity{???????private?Handler?mHandler?=?new?Handler(){??????????????????????public?void?handleMessage(Message?msg)?{???????????????switch?(msg.what)?{???????????????case?1:???????????????????showPopupWindow();???????????????????break;???????????????}???????????};???????};??????????????public?void?onCreate(Bundle?savedInstanceState)?{???????????super.onCreate(savedInstanceState);???????????setContentView(R.layout.main);??????????????????????//create?the?timer????????????Timer?timer?=?new?Timer();???????????timer.schedule(new?initPopupWindow(),?100);???????}??????????????private?class?initPopupWindow?extends?TimerTask{???????????@Override??????????public?void?run()?{??????????????????????????????Message?message?=?new?Message();???????????????message.what?=?1;???????????????mHandler.sendMessage(message);??????????????????????????}??????????????}?????????????????????public?void?showPopupWindow()?{???????????Context?mContext?=?PopupWindowDemo.this;???????????LayoutInflater?mLayoutInflater?=?(LayoutInflater)?mContext???????????????????.getSystemService(LAYOUT_INFLATER_SERVICE);???????????View?music_popunwindwow?=?mLayoutInflater.inflate(???????????????????R.layout.music_popwindow,?null);???????????PopupWindow?mPopupWindow?=?new?PopupWindow(music_popunwindwow,???????????????????LayoutParams.FILL_PARENT,?LayoutParams.WRAP_CONTENT);???????????mPopupWindow.showAtLocation(findViewById(R.id.main),?Gravity.CENTER,?0,?0);???????}???}???? ?
效果如下圖:?
這樣就可以初始化PopupWindow了,呵呵,這一節(jié)的布局文件有點(diǎn)多,如果大家想要源碼的話,留下你們的Email,我會盡快發(fā)送給大家的,今天就到這里,大家有什么不明白的歡迎留言!!!謝謝~