Android:Dialog和Activity的style的深入理解及对话框透明

 



 <!-- 自定义dialog 继承父类 android:style/Theme.Dialog-->
    <style name="DialogCustomTest" parent="android:style/Theme.Dialog">


        <!-- 边框 -->
         <item name="android:windowFrame">@null</item >
        <!-- 没有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 背景透明 -->
        <item name="android:windowIsTranslucent">false</item>
        <!-- 对话框的内容窗口背景色:让整个对话框的背景为透明-->
      <item name="android:windowBackground">@color/all_transparent</item>
       <!-- 整个屏幕背景是透明的 -->
      <!--    <item name="android:background">@android:color/transparent</item> -->
       <!-- 整个屏幕背景的灰度值:默认是黑色的 :遮障层的灰度-->
       <!-- <item name="android:backgroundDimAmount">0.5</item> -->
       <!-- dialog的整个屏幕的背景是否有遮障层  当设置这个最后时,上边两行不起作用-->
        <item name="android:backgroundDimEnabled">false</item>
        <!-- 重要,Dialog进出的显示动画 -->
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
        <!-- 是否有覆盖 -->
        <item name="android:windowContentOverlay">@null</item>
        
    </style>
    <style name="dialog"  parent="@android:style/Theme.Dialog" >
         <item name="android:windowFrame"> @null </item><!-- 边框 -->
         <item name="android:windowIsFloating"> true </item><!-- 是否浮现在activity之上 -->
         <item name="android:windowIsTranslucent">true</item><!-- 半透明 -->
         <item name="android:windowNoTitle">true</item><!-- 无标题 -->
         <item name="android:windowBackground">@drawable/bg</item><!-- 对话框的背景-->
         <item name="android:backgroundDimEnabled">false</item><!-- 模糊 -->
     </style>
     
     <style name="transparent" parent="android:Theme">
        <item name="android:windowBackground">@drawable/bg</item><!-- 此对话框的背景 -->
        <item name="android:windowIsTranslucent">true</item><!-- 对话框是否透明 -->
        <item name="android:windowContentOverlay">@null</item><!-- 对话框是否有遮盖 -->
        <item name="android:windowNoTitle">true</item><!-- 对话框无标题 -->
        <item name="android:windowIsFloating">true</item><!-- 对话框是否浮动 -->
        <item name="android:backgroundDimEnabled">false</item>
  </style>

样式:转自:http://www.cnblogs.com/0616--ataozhijia/archive/2012/12/12/2815224.html

以上是自定义Dialgog可以使用自定义样式:

关于<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> 重要,Dialog进出的显示动画要特别注意,可以自定义Dialog进出的动画,但是item的名字必须和下面的一样,以确定Android系统能够认识出来。

<style name= "Animation.Translucent" >
         <item name= "windowEnterAnimation" > @anim /translucent_enter</item>
         <item name= "windowExitAnimation" > @anim /translucent_exit</item>
     </style>

 ----------------------------------------------

Activity 自定义样式:

<style name= "ThemeActivity" >
      <item name= "android:windowAnimationStyle" > @style /AnimationActivity</item>
      <item name= "android:windowNoTitle" > true </item>
      <item name= "android:windowFullscreen" > true </item>
      <item name= "android:windowContentOverlay" > @null </item>
      <item name= "android:windowIsTranslucent" > true </item>
  </style>

 同样的每个item对应的name不能变,以保证Android系统能够辨认出来。

<style name= "AnimationActivity"  parent= "@android:style/Animation.Activity" >
         <item name= "android:activityOpenEnterAnimation" > @anim /slideinright</item> <span style= "background-color: #00ff00;" >第一次创建新Activity是调用的动画
</span>        <item name= "android:activityCloseExitAnimation" > @anim /slideoutright</item> <span style= "background-color: #00ff00;" >调用finish关闭该Activity是调用的动画
</span>        <item name= "android:activityOpenExitAnimation" > @anim /slideoutleft</item>   <span style= "background-color: #00ff00;" >activity还没有finish()下退出效果</span>
         <item name= "android:activityCloseEnterAnimation" > @anim /slideinleft</item> <span style= "background-color: #00ff00;" > 上一个activity返回进入效果 
</span><br>  </style>
转自:http://www.cnblogs.com/0616--ataozhijia/archive/2012/12/12/2815224.html







转自:http://blog.csdn.net/ooo4561213/article/details/6654961


首先自定义一个类,j继承自dialog类。

设置透明度,主要设置的是dialog自身的透明度

Java代码   收藏代码
  1. WindowManager.LayoutParams lp=getWindow().getAttributes();  
  2.                 lp.alpha=1.0f;  
  3.                 getWindow().setAttributes(lp);  
[java]  view plain copy
  1. WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();  
  2.                 lp.alpha=1.0f;  
  3.                 dialog.getWindow().setAttributes(lp);  

                
alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明,自身不可见。


设置幕布,也就是本dialog的背景层。

Java代码   收藏代码

               setContentView(R.layout.dialog);            
  1.           WindowManager.LayoutParams lp=dialog.getWindow().getAttributes(); 
  2.          getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 

  3.            lp.dimAmount=1.0f;  
  4.            getWindow().setAttributes(lp);  
[java]  view plain copy
  1. dialog.setContentView(R.layout.dialog);  
  2.                   
  3.                 WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();  
  4.                 lp.dimAmount=1.0f;  
  5.                 dialog.getWindow().setAttributes(lp);  
  6.                 dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);  


dimAmount在0.0f和1.0f之间,0.0f完全不暗,即背景是可见的 ,1.0f时候,背景全部变黑暗。

如果要达到背景全部变暗的效果,需要设置  dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
,否则,背景无效果。


此方法可以用来设置浮动层。呵呵!


例子:

    public void createDialog(Context context){
Dialog dialog  = new Dialog(context,R.style.transparent);
View view = LayoutInflater.from(context).inflate(R.layout.dialog_test_item, null);
dialog.setContentView(view);
WindowManager.LayoutParams a = dialog.getWindow().getAttributes();
                 a.gravity = Gravity.TOP;//设置对话框显示的位置
                a.dimAmount = 0.0f; // 去背景遮盖:即背景不会遮盖activity的内容
                a.alpha = 0.7f;//window 透明度
               dialog.getWindow().setAttributes(a);
      dialog.show();
      dialog.setOnCancelListener(null);//关闭对话框
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值