这篇文章会持续更新,在学过过程中所有关于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();//隐藏对话框

更多相关文章

  1. [Android(安卓)UI] ActionBar 自定义属性
  2. Android(安卓)单选组合框
  3. android横竖屏切换不重启activity
  4. 【3】windowNoTitle 和 android:windowNoTitle的区别
  5. Android(安卓)技术栈总结
  6. Android(安卓)Listview 隐藏滚动条
  7. Android阿拉伯适配rtl
  8. Android(安卓)资源文件中的符号含义与说明
  9. Android(安卓)之布局(二)

随机推荐

  1. android适配器的使用
  2. Qt for Android 中集成 ShareSDK
  3. Android 屏幕切换横竖屏时防止activity重
  4. Android Studio:Multiple dex files defin
  5. Android 5.0的调度作业JobScheduler
  6. android 异步加载图片总结
  7. android 错误信息大整理
  8. android音乐播放器监听电话状态,解决通话
  9. Android 在开发中使用单元测试
  10. Android SSWD(system server Watchdog)工