android 对话框弹出位置和透明度详解

本文章来给大家介绍android 对话框弹出位置和透明度详解,有需要的同学可参考,本文章总结了各种在安卓开发中话框弹透明实现方法,各位同学可参考。


分析

1、调整对话框后面的背景的透明度

2、将对话框头部去掉

3、将对话框自身的圆角白色边框替换为直角5px的白色边框

4、设置对话框内部背景。

 

先来看一个效果

AlertDialog dialog = new AlertDialog.Builder(this).setTitle("title") 
.setMessage("message").create(); 
Window window = alertDialog.getWindow(); 
window.setGravity(Gravity.TOP); //window.setGravity(Gravity.BOTTOM); 
alertDialog.show();


透明的对话框
默认显示的对话框是不透明的,但我们可以通过设置对话框的alpha值将其变成透明或半透明效果。我们都知道。颜色由R(红)、G(绿)、B(蓝)组成。除此之外,还会有一个A(透明度,Alpha)来描述颜色。在颜色的描述中,如果该值为0表示完全透明,如果该值为255,表示不透明。
通过设置Windows的alpha属性也可以设置对话框的透明度。但alpha的取值范围是从0到1.0。如果该属性值为0,表示完全透明,如果该值为1.0,表示不透明(也就是正常显示的对话框)。下面的代码通过将alpha的值设为0.3,为了更清晰地显示透明的对话框和非透明的对话框。在本例中加了一个背景图像,将同时显示了两个对话框(一个是半透明的,另一是不透明的)。


复制代码 代码如下:
// 显示透明的对话框 
AlertDialog alertDialog = new AlertDialog.Builder(this).setMessage( 
"透明对话框").setPositiveButton("确定", null).create(); 
Window window = alertDialog.getWindow(); 
WindowManager.LayoutParams lp = window.getAttributes(); 
// 设置透明度为0.3 
lp.alpha = 0.6f; 
window.setAttributes(lp); 
alertDialog.show();

 


我们在使用某些应用时会发现当弹出对话框或某些模式窗口时,后面的内容会变得模糊或不清楚。实际上,这些效果也很容易在OPhone中实现。为了实现这个功能,我们只需要设置Wndow对象的两个标志即可,代码如下:

 


去掉白边框

设置style,

    <style name="myDialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowFrame">@null</item> 
        <item name="android:windowIsFloating">true</item> 
        <item name="android:windowIsTranslucent">true</item> 
        <item name="android:windowNoTitle">true</item> 
<!–        <item name="android:background">@drawable/bg_sel</item>–> 
        <item name="android:windowBackground">@drawable/bg_sel</item> 
        <item name="android:backgroundDimEnabled">false</item> 
    </style>

将此style方在构造方法中。

4、设置对话框内部背景,

自定义一个dialog模板视图,里面只有两个linearlayout,所有的View都添加到里面的linearlayout中即可。

如下代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:padding="5px"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 
        android:id="@+id/linearLayout" android:background="#90333333"/> 
</LinearLayout>

实现由下至上弹出并位于屏幕底部的提示框:

1. button.setOnClickListener(new OnClickListener() { 
2.@Override 3.public void onClick(View arg0) { 4. // TODO Auto-generated method stub 5. AlertDialog dialog = new AlertDialog.Builder(TestAndroid1Activity.this) 6. .setTitle("title").setMessage("message").create(); 7. Window window = dialog.getWindow(); 
8. window.setGravity(Gravity.BOTTOM); //此处可以设置dialog显示的位置 9. window.setWindowAnimations(R.style.mystyle); //添加动画 10. dialog.show(); 
11.} 
12.); 
styles.xml

1.<?xml version="1.0" encoding="utf-8"?> 
2.<resources> 
3. 
4. <style name="mystyle" parent="android:Animation"> 5. <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> //进入时的动画 6. <item name="@android:windowExitAnimation">@anim/dialog_exit</item> //退出时的动画 7. </style> 
8.</resources>

位于 res/anim/dialog_enter.xml

1.<?xml version="1.0" encoding="utf-8"?> 
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3. 
4. <translate 
5. android:fromYDelta="100%p" %p指相对于父容器 6. android:duration="600" 7. /> 
8.</set> 
位于 res/anim/dialog_exit.xml

1.<?xml version="1.0" encoding="utf-8"?> 
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3. 
4. <translate 
5. android:toYDelta="100%p" 6. android:duration="600" //持续时间 7. /> 
8.</set> 
此处只是做了垂直位移的效果,自己还可以试试别的效果。

<alpha /> 透明度

<rotate /> 旋转

<scale /> 缩放

如何使Android dialog弹出后的Android activity背景不变暗


在style 的xml 里 设置如下

<resources>
    <style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:backgroundDimEnabled">false</item><!--activity不变暗-->
    </style>
</resources>


设置为true, 背景变暗

Dialog = new Dialog(Activity, R.style.dialog);

摘自:http://www.111cn.net/sj/android/48316.htm   http://www.linuxidc.com/Linux/2012-04/59152.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值