均屬于筆記,僅供個(gè)人參考,有問題歡迎指正
一,activity以窗口形式呈現(xiàn):
在AndroidManifest.xml中進(jìn)行一個(gè)theme配置:
如:<activity Android:name=".OtherActivity" android:theme="@android:style/Theme.Dialog"></activity>
參考:http://blog.csdn.net/xingmeng916/article/details/6857620
二,Android:將activity設(shè)置為彈出式的并設(shè)置為透明的
1. 在res/values 下建立color.xml
? <resources>?
<color name="transparent_background">#80ffffff</color>
</resources>
PS:? #80是透明度的值(即80%透明),ffffff是顏色值(為黑色)
2. 在res/values下建立style.xml
<resources>
<style name="Transparent" parent="android:style/Theme.Dialog">
? <item name="android:windowBackground">@color/transparent_background</item>
? <item name="android:windowNoTitle">true</item>
? <item name="android:windowIsTranslucent">true</item>
? <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>
</style>
</resources>
PS: parent="android:style/Theme.Dialog" 是將activity設(shè)置為彈出式窗口
3. 在AndroidManifest.xml中找到要彈出的activity,加入theme:
<activity android:name="ActivityName"
? android:theme="@style/Transparent"
? />
完成上面設(shè)置后,你的activity就已經(jīng)是透明的了,但是該Activity中的控件還沒有透明,如果還需要控件透明,則需要在該activity的代碼中加入如下代碼:
//設(shè)置activity中的控件透明
? Window window = getWindow();
? WindowManager.LayoutParams wl = window.getAttributes();
? wl.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
? wl.alpha=0.95f;//設(shè)置透明度,0.0為完全透明,1.0為完全不透明
? window.setAttributes(wl);
參考:http://blog.csdn.net/chaozhung_no_l/article/details/8900682
三,對(duì)讓彈出框消失的處理
1,自身布局中的控件
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
}
對(duì)于點(diǎn)擊外圍和返回鍵不攔截時(shí),默認(rèn)的操作就是讓彈出框消失。(和自己攔截后調(diào)用finish方法的效果相同)
2,點(diǎn)擊外圍(判斷是否需要攔截,攔截后什么都不做,再消費(fèi)掉對(duì)應(yīng)的事件即可)
//當(dāng)需要是返回鍵和點(diǎn)擊外圍失效可以重寫onTouchEvent方法,截取返回鍵點(diǎn)擊事件
//這塊可以沒有onTouchEvent這個(gè)方法,既不需要攔截觸摸事件,默認(rèn)的就是銷毀該活動(dòng)
@Override
public boolean onTouchEvent(MotionEvent event)
{
finish();
return true;
//這塊true和false都可以,一個(gè)是消費(fèi)掉事件,一個(gè)是不消費(fèi)交由父控件消費(fèi)
// return false;
}
3,返回鍵(判斷是否需要攔截,攔截后什么都不做,再消費(fèi)掉對(duì)應(yīng)的事件即可)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//攔截了什么都不做
// finish();
return true;
}
return false;
}
四,控制對(duì)話框風(fēng)格的activity的顯示大小與位置
實(shí)現(xiàn)對(duì)話框風(fēng)格的activity,我們需要在AndroidManifest.xml添加一句樣式聲明:
<activity
android:name=".product.MyselfPayProduct"
? android:screenOrientation="portrait"
? android:theme="@android:style/Theme.Dialog" >
不過這樣的對(duì)話框風(fēng)格往往無法滿足我們的需要,顯示的效果不那么令人滿意,第一點(diǎn)就是如何控制對(duì)話框的大?。?/p>
//窗口對(duì)齊屏幕寬度
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP;//設(shè)置對(duì)話框置頂顯示
win.setAttributes(lp);
將這個(gè)控制語句添加在我們的對(duì)話框activity的onCreate()方法中,這樣我們的對(duì)話框就可以寬度與屏幕一樣寬了,lp.gravity = Gravity.TOP;//設(shè)置對(duì)話框置頂顯示,android默認(rèn)對(duì)話框居中顯示,我們可以通過這句代碼設(shè)置對(duì)話框的顯示位置。
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
win.setAttributes(lp);
// 這里是設(shè)置偏移量,這里的x,y并不是相對(duì)于屏幕的絕對(duì)坐標(biāo),而是相對(duì)于對(duì)話框在中心位置(默認(rèn)的對(duì)話框一般顯示在屏幕的中心)而言的?
// lp.x = -20;// 設(shè)置水平偏移量?
// lp.y = 180;// 設(shè)置豎直偏移量?
// WindowManager.LayoutParams lp = getWindow().getAttributes();?
// ? ? lp.width = LayoutParams.FILL_PARENT;?
// ? ? lp.gravity = Gravity.BOTTOM;?
// ? ? getWindow().setAttributes(lp);?
參考:http://blog.csdn.net/fengqiaoyebo2008/article/details/5907373
http://www.cnblogs.com/AndroidJotting/p/4768849.html