均属于笔记,仅供个人参考,有问题欢迎指正
一,activity以窗口形式呈现:
在AndroidManifest.xml中进行一个theme配置:
如:<activity Android:name=".OtherActivity" android:theme="@android:style/Theme.Dialog"></activity>
参考:http://blog.csdn.net/xingmeng916/article/details/6857620
二,Android:将activity设置为弹出式的并设置为透明的
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设置为弹出式窗口
3. 在AndroidManifest.xml中找到要弹出的activity,加入theme:
<activity android:name="ActivityName"
android:theme="@style/Transparent"
/>
完成上面设置后,你的activity就已经是透明的了,但是该Activity中的控件还没有透明,如果还需要控件透明,则需要在该activity的代码中加入如下代码:
//设置activity中的控件透明
Window window = getWindow();
WindowManager.LayoutParams wl = window.getAttributes();
wl.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
wl.alpha=0.95f;//设置透明度,0.0为完全透明,1.0为完全不透明
window.setAttributes(wl);
参考:http://blog.csdn.net/chaozhung_no_l/article/details/8900682
三,对让弹出框消失的处理
1,自身布局中的控件
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
}
对于点击外围和返回键不拦截时,默认的操作就是让弹出框消失。(和自己拦截后调用finish方法的效果相同)
2,点击外围(判断是否需要拦截,拦截后什么都不做,再消费掉对应的事件即可)
//当需要是返回键和点击外围失效可以重写onTouchEvent方法,截取返回键点击事件
//这块可以没有onTouchEvent这个方法,既不需要拦截触摸事件,默认的就是销毁该活动
@Override
public boolean onTouchEvent(MotionEvent event)
{
finish();
return true;
//这块true和false都可以,一个是消费掉事件,一个是不消费交由父控件消费
// return false;
}
3,返回键(判断是否需要拦截,拦截后什么都不做,再消费掉对应的事件即可)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//拦截了什么都不做
// finish();
return true;
}
return false;
}
四,控制对话框风格的activity的显示大小与位置
实现对话框风格的activity,我们需要在AndroidManifest.xml添加一句样式声明:
<activity
android:name=".product.MyselfPayProduct"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Dialog" >
不过这样的对话框风格往往无法满足我们的需要,显示的效果不那么令人满意,第一点就是如何控制对话框的大小:
//窗口对齐屏幕宽度
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;//设置对话框置顶显示
win.setAttributes(lp);
将这个控制语句添加在我们的对话框activity的onCreate()方法中,这样我们的对话框就可以宽度与屏幕一样宽了,lp.gravity = Gravity.TOP;//设置对话框置顶显示,android默认对话框居中显示,我们可以通过这句代码设置对话框的显示位置。
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);
// 这里是设置偏移量,这里的x,y并不是相对于屏幕的绝对坐标,而是相对于对话框在中心位置(默认的对话框一般显示在屏幕的中心)而言的
// lp.x = -20;// 设置水平偏移量
// lp.y = 180;// 设置竖直偏移量
// 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
网友评论