自定义Dialog(详细)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:31   2206   0

不多说,直接写步骤。

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);

}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP