前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android自定义Dialog

Android自定义Dialog

作者头像
developerHaoz
发布2022-05-13 14:43:14
1.1K0
发布2022-05-13 14:43:14
举报
文章被收录于专栏:developerHaoz 的安卓之旅

在开发中,我们经常会用到一些自定义布局的对话框。每次自己写的时候,经常会遇到一些细小的问题需要上网来解决,所以干脆把经常遇到的几个问题总结了一下,这样就可以愉快自定义dialog了。本文主要总结的问题有:1.对话框的大小、位置 2.对话框的主题

自定义dialog的大小、位置

  • 自定义对话框的大小 对话框的大小的设置有两种方法: 1.通过WindowManager.LayoutParams来设置,具体请看如下的代码:
代码语言:javascript
复制

  dialog.setContentView(R.layout.layout_dialog);
  //获取到当前Activity的Window
  Window dialog_window = dialog.getWindow();
  //获取到LayoutParams
  WindowManager.LayoutParams dialog_window_attributes = dialog_window.getAttributes();
  //设置宽度
  dialog_window_attributes.width=400;
  //设置高度
  dialog_window_attributes.height=400;
  dialog_window.setAttributes(dialog_window_attributes);
  dialog.show();

这种方式主要是通过在代码中获取当前window的LayoutParams,通过设置宽度、高度来改变Dialog的宽高的。

代码语言:javascript
复制
   2.通过自定义Dialog的布局来设置对话框的大小。在布局的时候,将整个layout的宽高设定为固定值,这样将layout设置到Dialog中时,对话框的大小将按照布局的大小显示。    

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:orientation="vertical"
        android:background="@android:color/darker_gray">

    </LinearLayout>
  • 自定义对话框的位置 对话框的位置设置也是通过Gravity和WindowManager.LayoutParams来设置的。代码如下:
代码语言:javascript
复制
  //获取到当前Activity的Window
  Window dialog_window = dialog.getWindow();
  //设置对话框的位置
  dialog_window.setGravity(Gravity.TOP|Gravity.LEFT);
  //获取到LayoutParams
  WindowManager.LayoutParams dialog_window_attributes = dialog_window.getAttributes();
  //设置对话框位置的偏移量
  dialog_window_attributes.x=50;
  dialog_window_attributes.y=50;
  dialog_window.setAttributes(dialog_window_attributes);
 

dialog主题的部分属性的意义##

一、

代码语言:javascript
复制
//设置dialog头部不显示
<item name="android:windowNoTitle">true</item>

效果如下图:

如果设置 <item name="android:windowNoTitle">false</item>

显示效果为下图:

二、

代码语言:javascript
复制
 //设置对话框的背景颜色是
 <item name="android:background">@android:color/black</item>

现在我们将background属性设置为黑色,显示效果如下: 可以看到对话框的文字部分的背景全部成了黑色,所以我们通常把这个属性的设置为透明的(@android:color/transparent)。

三、

代码语言:javascript
复制
//设置点击dialog以外的区域,dialog是否消失
<item name="android:windowCloseOnTouchOutside">false</item>

四、

代码语言:javascript
复制
//是否允许对话框的背景变暗
<item name="android:backgroundDimEnabled">false</item>

具体效果图(上面的图为backgroundDimEnabled值为false情况,下面的图值为true,一般情况下我们都设置为true,也就是右图的样式):

五、

代码语言:javascript
复制
//对话框的背景变暗的程度,值越大,背景就越暗
<item name="android:backgroundDimAmount">0.3</item>

如图(上面的图backgroundDimAmount属性的值为0.8,下面的图为0.3,可以明显看出两个对话框的背景灰度的差别)

六、

代码语言:javascript
复制
//dialog的动画效果    
<item name="android:windowAnimationStyle">@style/dialog_animation</item>

动画效果分为:进入动画和退出动画

代码语言:javascript
复制
<style name="dialog_animation">
    <item name="windowEnterAnimation">@anim/dialog_enter</item>
    <item name="windowExitAnimation">@anim/dialog_exit</item>
</style>

七、windowBackground属性,设置这个属性后,dialog周边的一圈黑边就可以消失了,但是不过设置什么颜色,周边的黑边都消失,并没有显示出其他颜色的轮廓,很是奇怪。

代码语言:javascript
复制
//设置dialog的背景颜色
 <item name="android:windowBackground">@android:color/holo_red_dark</item>

效果图如下(上面的图是设置了windowBackground的属性值的,不管设置什么颜色的值,其效果都如下图一样。下面的图是没有设置这个属性值的,用的还是Theme.Dialog中的值,对话框周边就会出现一道黑边):

八、

代码语言:javascript
复制
//Dialog的windowFrame框
<item name="android:windowFrame">@android:color/holo_red_dark</item>

当设置属性值为@null时,dialog显示所有图片中的样子,当为这个属性设置一个颜色时,比如代码中的深红色,显示效果如下:

九、

代码语言:javascript
复制
<!-- 是否悬浮在activity上 -->
<item name="android:windowIsFloating">true</item>

具体效果如图(上面的图为属性值为false情况,下面的图为属性值为true情况):

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义dialog的大小、位置
  • dialog主题的部分属性的意义##
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档