均属于笔记,仅供个人参考,有问题欢迎指正
Android中可用于实现对话框的有Dialog,PopupWindow,Activity。
一,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
三,Dialog
private void ShowDialog() {
dialog = new Dialog(mycontext, R.style.dialog);
dialog.setContentView(R.layout.activity_show);
dialog.show();
}
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/black</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
弹出窗口的两种实现方式 PopupWindow 和 Activity
参考:http://www.cnblogs.com/winxiang/archive/2012/11/20/2778729.html
四,PopupWindow
// // 使其聚焦
// mPopupWindow.setFocusable(true);
// // 设置允许在外点击消失
// mPopupWindow.setOutsideTouchable(true);
// //刷新状态
// mPopupWindow.update();
// //点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
// mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
private void ShowPopupWindow() {
// 获取LayoutInflater实例
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(LAYOUT_INFLATER_SERVICE);
// 这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵
// 该方法返回的是一个View的对象,是布局中的根
View layout = inflater.inflate(R.layout.activity_show, null);
// 下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单
menuWindow = new PopupWindow(layout, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT); // 后两个参数是width和height
// menuWindow.showAsDropDown(layout); //设置弹出效果
// menuWindow.showAsDropDown(null, 0, layout.getHeight());
// 设置如下四条信息,当点击其他区域使其隐藏,要在show之前配置
menuWindow.setFocusable(true);
menuWindow.setOutsideTouchable(true);
menuWindow.update();
menuWindow.setBackgroundDrawable(new BitmapDrawable());
final RelativeLayout adlayout = (RelativeLayout) layout
.findViewById(R.id.adlayout);
adlayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
adlayout.setBackgroundResource(R.drawable.mm1);
}
});
menuWindow.showAtLocation(layout, Gravity.CENTER_VERTICAL
| Gravity.CENTER_HORIZONTAL, 0, 50); // 设置layout在PopupWindow中显示的位置
// 如何获取我们main中的控件呢?也很简单
Button cancel = (Button) layout.findViewById(R.id.cancel);
// 下面对每一个Layout进行单击事件的注册吧。。。
// 比如单击某个MenuItem的时候,他的背景色改变
// 事先准备好一些背景图片或者颜色
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// adlayout.setBackgroundResource(R.drawable.mm1);
// mywebView.loadUrl(URL);
menuWindow.dismiss(); // 响应点击事件之后关闭Menu
}
});
}
Android使用Activity用作弹出式对话框
参考:http://blog.csdn.net/lmj623565791/article/details/23116115