关于Android中的各种Dialog
16lz
2021-12-04
这篇文章会持续更新,在学过过程中所有关于Dialog的知识都会记录在文章中
自定义Dialog
- 首先编写一个类,以及一个布局文件
public class MobileSafeDialog extends Dialog { public MobileSafeDialog(Context context) { super(context); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = View.inflate(Util.getContext(), R.layout.dialog_layout, null); setContentView(view); Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.BOTTOM; //底部对齐 window.setAttributes(params); }}----------"http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> "match_parent" android:layout_height="wrap_content" android:background="#F48F78" android:textColor="#000000" android:padding="8dp" android:text="设置标题" /> "match_parent" android:layout_height="200dp" android:divider="@android:color/darker_gray" android:dividerHeight="2dp">
这个效果实在是太差了,我们继续改进
- 修改Dialog的样式
我们找到系统定义的Dialog样式 Theme.Light -> Theme.Dialog.NoFrame
我们将这段样式文件拷贝到项目中的styles文件中,用来自定义Dialog的样式,然后再Dialog中引用这个样式
这样我们就引用了自己定义的样式,我们再来慢慢修改这个样式,让Dialog展现成我们想要的效果(有的人可能会疑惑,为什么系统有了我们还要定义呢,原因就是系统的样式我们是无法直接使用的,所以需要我们来自定义样式)
再来看下效果
大家可以结合这张图,来尝试改变上面属性的值,然后根据自己想要的效果来更改属性文件
最后如果想要宽度填充父窗口,看下面这段代码
public class MobileSafeDialog extends Dialog { public MobileSafeDialog(Context context) { super(context,R.style.MobileSafeDialogStyle); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = View.inflate(Util.getContext(), R.layout.dialog_layout, null); setContentView(view); Window window = getWindow(); WindowManager m = window.getWindowManager(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.BOTTOM; params.width = m.getDefaultDisplay().getWidth(); //宽度为window的宽度 window.setAttributes(params); }}
最后一点定义Dialog的进入退出动画,Theme.Dialog -> windowAnimationStyle -> @style/Animation.Dialog
<item name="windowEnterAnimation">@anim/dialog_enteritem> <item name="windowExitAnimation">@anim/dialog_exititem>
后面发现是通过这两个属性来设置进入退出动画的,那么想要进入退出动画就很简单的啦
<style name="MobileSafeDialogAnim"> <item name="android:windowEnterAnimation">@anim/dialog_enter - "android:windowExitAnimation"
>@anim/dialog_exitstyle>----------//进入动画代码<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" > <translate android:fromYDelta="100%" android:toYDelta="0"/>set>//退出动画代码<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500"> <translate android:fromYDelta="0" android:toYDelta="100%" />set>
再将这个属性在自定义属性windowAnimationStyle中引用就行了
效果
ProgressDialog
ProgressDialog dialog = new ProgressDialog(this);//这里需要注意的是使用的上下文必须是Activity,简单的来理解就是Dialog需要显示在Activity上。dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置进度条样式dialog.setCancelable(false);//设置进度条是否可以消失dialog.show();//显示对话框dialog.dismiss();//隐藏对话框
更多相关文章
- [Android(安卓)UI] ActionBar 自定义属性
- Android(安卓)单选组合框
- android横竖屏切换不重启activity
- 【3】windowNoTitle 和 android:windowNoTitle的区别
- Android(安卓)技术栈总结
- Android(安卓)Listview 隐藏滚动条
- Android阿拉伯适配rtl
- Android(安卓)资源文件中的符号含义与说明
- Android(安卓)之布局(二)