在开发中,我们经常会用到一些自定义布局的对话框。每次自己写的时候,经常会遇到一些细小的问题需要上网来解决,所以干脆把经常遇到的几个问题总结了一下,这样就可以愉快自定义dialog了。本文主要总结的问题有:1.对话框的大小、位置 2.对话框的主题
自定义dialog的大小、位置
自定义对话框的大小
对话框的大小的设置有两种方法:
1.通过WindowManager.LayoutParams来设置,具体请看如下的代码:
` Dialog dialog=new Dialog(this,R.style.dialog);
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的宽高的。
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来设置的。代码如下:
//获取到当前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主题的部分属性的意义##
//设置dialog头部不显示
<item name="android:windowNoTitle">true</item>
效果如下图:
动画效果分为:进入动画和退出动画
<style name="dialog_animation">
<item name="windowEnterAnimation">@anim/dialog_enter</item>
<item name="windowExitAnimation">@anim/dialog_exit</item>
</style>
七、windowBackground属性,设置这个属性后,dialog周边的一圈黑边就可以消失了,但是不过设置什么颜色,周边的黑边都消失,并没有显示出其他颜色的轮廓,很是奇怪。
//设置dialog的背景颜色
<item name="android:windowBackground">@android:color/holo_red_dark</item>
效果图如下(上面的图是设置了windowBackground的属性值的,不管设置什么颜色的值,其效果都如下图一样。下面的图是没有设置这个属性值的,用的还是Theme.Dialog中的值,对话框周边就会出现一道黑边):
//Dialog的windowFrame框
<item name="android:windowFrame">@android:color/holo_red_dark</item>
当设置属性值为@null时,dialog显示所有图片中的样子,当为这个属性设置一个颜色时,比如代码中的深红色,显示效果如下: