激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

2020-12-19 16:27Android開發(fā)教程網(wǎng) Android

本人小菜一個。目前只見過兩種彈出框的實現(xiàn)方式,第一種是最常見的PopupWindow,第二種也就是Activity的方式是前幾天才見識過,需要的朋友可以參考下

本人小菜一個。目前只見過兩種彈出框的實現(xiàn)方式,第一種是最常見的popupwindow,第二種也就是activity的方式是前幾天才見識過。感覺很霸氣哦。沒想到,activity也可以做偽窗口。
先貼上最常見的方法,主要講activity的方法。
一、彈出popupwindow

android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

復制代碼 代碼如下:


/**
* 彈出menu菜單
*/
public void menu_press(){
if(!menu_display){
//獲取layoutinflater實例
inflater = (layoutinflater)this.getsystemservice(layout_inflater_service);
//這里的main布局是在inflate中加入的哦,以前都是直接this.setcontentview()的吧?呵呵
//該方法返回的是一個view的對象,是布局中的根
layout = inflater.inflate(r.layout.main_menu, null);
//下面我們要考慮了,我怎樣將我的layout加入到popupwindow中呢???很簡單
menuwindow = new popupwindow(layout,layoutparams.fill_parent, layoutparams.wrap_content); //后兩個參數(shù)是width和height
//menuwindow.showasdropdown(layout); //設置彈出效果
//menuwindow.showasdropdown(null, 0, layout.getheight());
//設置如下四條信息,當點擊其他區(qū)域使其隱藏,要在show之前配置
menuwindow.setfocusable(true);
menuwindow.setoutsidetouchable(true);
menuwindow.update();
menuwindow.setbackgrounddrawable(new bitmapdrawable());
mclose = (linearlayout)layout.findviewbyid(r.id.menu_close);
menuwindow.showatlocation(this.findviewbyid(r.id.schoolmain), gravity.bottom|gravity.center_horizontal, 0,50); //設置layout在popupwindow中顯示的位置
//如何獲取我們main中的控件呢?也很簡單
mmainbtn = (linearlayout)layout.findviewbyid(r.id.menu_main_btn);
mhistorybtn = (linearlayout) layout.findviewbyid(r.id.menu_history_btn);
mhelpbtn = (linearlayout) layout.findviewbyid(r.id.menu_help_btn);
//下面對每一個layout進行單擊事件的注冊吧。。。
//比如單擊某個menuitem的時候,他的背景色改變
//事先準備好一些背景圖片或者顏色
mmainbtn.setonclicklistener (new view.onclicklistener() {
@override
public void onclick(view arg0) {
mywebview.loadurl(url);
menuwindow.dismiss(); //響應點擊事件之后關(guān)閉menu
}
});
mhelpbtn.setonclicklistener (new view.onclicklistener() {
@override
public void onclick(view arg0) {
mywebview.loadurl(url);
menuwindow.dismiss(); //響應點擊事件
}
});
mhistorybtn.setonclicklistener (new view.onclicklistener() {
@override
public void onclick(view arg0) {
mywebview.loadurl(url);
menuwindow.dismiss(); //響應點擊事件
}
});
menu_display = true;
}else{
//如果當前已經(jīng)為顯示狀態(tài),則隱藏起來
menuwindow.dismiss();
menu_display = false;
}
}
public void back_press(){
if(menu_display){ //如果 menu已經(jīng)打開 ,先關(guān)閉menu
menuwindow.dismiss();
menu_display = false;
}
else {
intent intent = new intent();
intent.setclass(mainactivity.this,exit.class);
startactivity(intent);
}
}


這種方法很簡單,要注意的是如果要想點擊其他地方使其隱藏,要在show設置四條屬性如下:
// 使其聚焦
mpopupwindow.setfocusable(true);
// 設置允許在外點擊消失
mpopupwindow.setoutsidetouchable(true);
//刷新狀態(tài)
mpopupwindow.update();
//點back鍵和其他地方使其消失,設置了這個才能觸發(fā)ondismisslistener ,設置其他控件變化等操作
mpopupwindow.setbackgrounddrawable(new bitmapdrawable());
二、activity做偽彈窗

android PopupWindow 和 Activity彈出窗口實現(xiàn)方式

 
本人感覺這個很先進啊。恕我冒犯,我只這里直接寫上牛人的代碼。此牛人寫的是防微信的demo。做的相當好,我在后面附上csdn免費下載鏈接。
先貼上java代碼——exit.java
package cn.buaa.myweixin;
import android.app.activity;
import android.os.bundle;
import android.view.motionevent;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.linearlayout;
import android.widget.toast;
public class exit extends activity {
private linearlayout layout;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.exit_dialog);
layout=(linearlayout)findviewbyid(r.id.exit_layout);
layout.setonclicklistener(new onclicklistener() {
@override
public void onclick(view v) {
// todo auto-generated method stub
toast.maketext(getapplicationcontext(), "提示:點擊窗口外部關(guān)閉窗口!",
toast.length_short).show();
}
});
}
@override
public boolean ontouchevent(motionevent event){
finish();
return true;
}
public void exitbutton1(view v) {
this.finish();
}
public void exitbutton0(view v) {
this.finish();
mainweixin.instance.finish();//關(guān)閉main 這個activity
}
}
附上布局文件:exit_dialog.xml

復制代碼 代碼如下:


view code
<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/exit_layout"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:background="@drawable/confirm_dialog_bg2" >
<textview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margintop="4dp"
android:padding="5dp"
android:textcolor="#333"
android:textsize="20sp"
android:text="退出微信" />
<textview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textcolor="#333"
android:layout_margintop="1dp"
android:padding="10dp"
android:textsize="16sp"
android:gravity="center_horizontal"
android:text="退出后,你將收不到新的消 息.確定要退出?" />
<linearlayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margintop="33dp"
android:layout_marginbottom="8dp"
>
<button
android:id="@+id/exitbtn0"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:text="是"
android:textsize="16sp"
android:textcolor="#fff"
android:background="@drawable/btn_style_green"
android:gravity="center"
android:onclick="exitbutton0"
/>
<button
android:id="@+id/exitbtn1"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_marginleft="10dp"
android:text="否"
android:textsize="16sp"
android:textcolor="#333"
android:background="@drawable/btn_style_white"
android:gravity="center"
android:onclick="exitbutton1"
/>
</linearlayout>
</linearlayout>


分析,彈出exit這個框很簡單,本身就是activity,在主界面用startavtivity等方法像普通activity啟動。
關(guān)鍵是如何做到點擊其他地方退出和如何關(guān)閉程序。
、點擊其他地方退出,只要監(jiān)聽onclicklistener讓所有的點擊都退出就行了(除了xml中指定按鈕事件之外)。
、退出主程序。只要在出程序中將主程序自己設置成靜態(tài)對象,在外部調(diào)用即可 public static mainweixin instance=null;
上面的布局和activity并不能將activity的窗體展現(xiàn)在主界面之上,看起來像個彈出框。下面是彈出框的styles配置:

復制代碼 代碼如下:


<style name="mydialogstyle">
<item name="android:windowbackground">@android:color/transparent</item>
<item name="android:windowframe">@null</item>
<item name="android:windownotitle">true</item>
<item name="android:windowisfloating">true</item>
<item name="android:windowistranslucent">true</item>
<item name="android:windowcontentoverlay">@null</item>
<item name="android:windowanimationstyle">@android:style/animation.dialog</item>
<item name="android:backgrounddimenabled">true</item>
</style>


下面我們來分析一下這個布局的含義及重點:
重點1、<item name="android:windowbackground">@android:color/transparent</item>窗口背景色
重點2、<item name="android:windowframe">@null</item>dialog的windowframe框為無
重點4、<item name="android:windowisfloating">true</item>是否浮現(xiàn)在activity之上
重點5、<item name="android:windowistranslucent">true</item>窗口是否半透明——是(與第一條配合使用)
重點6、<item name="android:windowanimationstyle">@android:style/animation.dialog</item>窗口彈出效果
重點7、<item name="android:backgrounddimenabled">true</item> 是否允許背景模糊
重點8、<item name="android:windowcontentoverlay">@null</item>這個不設置的話,可能會出現(xiàn)邊框黑線
以上代碼都是牛人們的功勞,我拿來做一分析,給更多需要的朋友。
我在眾多牛人的指引下一步步成長,感謝牛人們。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一区二区三区在线观看免费视频 | 国产视频软件在线 | 午夜视频在线看 | 国产精品视频在线观看免费 | 亚洲一区二区网址 | 一级毛片免费大片 | 中文字幕一二三区芒果 | 日本欧美中文字幕 | 亚洲国产午夜精品 | 女人裸体让男人桶全过程 | 斗罗破苍穹在线观看免费完整观看 | 一级电影免费 | 欧洲成人精品 | 日韩在线视频二区 | 中国漂亮护士一级a毛片 | 成人羞羞视频在线观看免费 | 久国产| 国产 日韩 亚洲 欧美 | 一区二区三区日韩电影 | 中国精品久久 | 91精品国 | 一级成人免费 | 有色视频在线观看 | 国产精品久久久久久久久久久久午夜 | 国产精品99精品 | 久久久日韩精品一区二区三区 | 午夜精品久久久久久久99热浪潮 | h色网站在线观看 | 97色在线观看免费视频 | 狠狠操精品视频 | 久草视频福利在线观看 | 国产91亚洲精品一区二区三区 | 91色琪琪电影亚洲精品久久 | 久久精品成人影院 | 黄色片免费看网站 | 一级观看免费完整版视频 | 亚洲精品动漫在线观看 | 黄色毛片前黄 | 国产一区二区视频在线播放 | va免费视频 | 天堂在线中文资源 |