关于Android中的各种Dialog


这篇文章会持续更新,在学过过程中所有关于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">

    

关于Android中的各种Dialog_第1张图片

这个效果实在是太差了,我们继续改进

  • 修改Dialog的样式
    我们找到系统定义的Dialog样式 Theme.Light -> Theme.Dialog.NoFrame

关于Android中的各种Dialog_第2张图片

我们将这段样式文件拷贝到项目中的styles文件中,用来自定义Dialog的样式,然后再Dialog中引用这个样式

关于Android中的各种Dialog_第3张图片

关于Android中的各种Dialog_第4张图片

这样我们就引用了自己定义的样式,我们再来慢慢修改这个样式,让Dialog展现成我们想要的效果(有的人可能会疑惑,为什么系统有了我们还要定义呢,原因就是系统的样式我们是无法直接使用的,所以需要我们来自定义样式)

再来看下效果

关于Android中的各种Dialog_第5张图片

大家可以结合这张图,来尝试改变上面属性的值,然后根据自己想要的效果来更改属性文件
最后如果想要宽度填充父窗口,看下面这段代码

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_exit
style>


----------
//进入动画代码
<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,android)