不多说,直接写步骤。
1.首先自定义类实现AlertDialog (dialog及dialog的子类就可以),并实现器构造方法
public class MyDialog extends AlertDialog {
private Activity context;
public MyDialog(Activity context) { // 通过构造方法 传入自定义的样式 super(context, R.style.AddrDialogStyle); //传入上下文
this.context = context; }
}
2.其中R.style.AddrDialogStyle就是我们自定义的dialog的样式(这些就可以根据你自己的需求设置啦,我去掉了标题栏和设置了背景并自定义了动画)
<style name="AddrDialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <!-- 去标题栏 --> <item name="android:windowBackground">@color/white</item> <!-- 背景白色 --> <item name="android:windowAnimationStyle">@style/ADDRDialogAnim</item>
<!-- 动画--> </style>
<style name="ADDRDialogAnim"> <item name="android:windowEnterAnimation">@anim/dialog_enter</item> <!-- dialog的显示动画 --> <item name="android:windowExitAnimation">@anim/dialog_exit</item> <!-- 消失动画 --> </style>
3.自定义动画样放在res下anim文件夹下,如下(这里可以设置任意你想要的动画,我这里就是平移动画)
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--动画集合只有一个平移动画--> <translate android:duration="1000" android:toYDelta="0%" android:fillAfter="true" android:fromYDelta="100%p" /> </set>
4.实现dialog的onCreate方法(在这里设置我们的dialog的view了)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
//打气进我们的布局(布局的控件你可以任意赋值 并进行其他操作哦)
View inflate = View.inflate(getContext(), R.layout.dialog_add_style, null);
setContentView(inflate);
//记住dialog在界面显示的方式要设置在setContentView的后面,否则会显示出错
(在这里我们需求就是在底部弹出,宽度占满)
// 获取窗口对象 Window window = getWindow(); // 获取对应的布局参数 WindowManager.LayoutParams layoutParams = window.getAttributes(); //保证宽度占满屏幕 layoutParams.width = window.getWindowManager().getDefaultDisplay().getWidth(); // 更改显示位置 CENTER_HORIZONTAL解决不同屏幕的适配问题 layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; // 重新设置布局参数 window.setAttributes(layoutParams);
}
|