diaLog的学习笔记

资料阅读

Android常用对话框大全——Dialogicon-default.png?t=M4ADhttps://blog.csdn.net/a_zhon/article/details/54578047

了解dialog的类别和使用

http://www.cnblogs.com/xiaoluo501395377/p/3419398.html

http://www.cnblogs.com/xiaoluo501395377/p/3421727.html

实现一个自定义的dialog

https://blog.csdn.net/Small_Lee/article/details/50602400

https://blog.csdn.net/small_lee/article/details/50602500

progressBar和progressDialog的使用

https://blog.csdn.net/hardworkingant/article/details/71910731

新版本谷歌推荐用dialogFragment来替代dialog和相关的子类,能更好的管理窗口的生命周期以及在屏幕切换的时候,及时的保存数据

资料参考  https://blog.csdn.net/xiangzhihong8/article/details/38294059

小实践:设置一个浮空的progressBar(DialogFragment)

布局文件

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/tv_remind"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:text="@string/wait_please_qsh"
        app:layout_constraintBottom_toBottomOf="@+id/progressBar"
        app:layout_constraintEnd_toStartOf="@+id/progressBar"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/progressBar" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:indeterminate="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

dialogFragment

重写oncancle()和onDismiss()

public class ProgressBarFragment extends DialogFragment {
    private static final String TAG = "LogUtil.ProgressBarFt";

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       return inflater.inflate(R.layout.progress_bar_no_click,container);
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        LogUtil.i(TAG, "onCancel: ");
        super.onCancel(dialog);
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        LogUtil.i(TAG, "onDismiss: ");
        super.onDismiss(dialog);
    }
}

调用

 ProgressBarFragment progressBar=new ProgressBarFragment();
 progressBar.show(getSupportFragmentManager(),"inquireCustomDuplicate");

实现效果

还可以设置更多效果

可以设置dialog的窗口透明,这样就只会显示一个progressbar,不会有背景的白色

设置背景不会变暗,这样看起来,就像是一个活动内的progressbar

可以设置dialog不可取消,这样可以禁止客户重复进行一些操作

在onstart()中设置

@Override
    public void onStart() {
        super.onStart();
        Dialog dialog=getDialog();
        if (dialog!=null){
            dialog.setCancelable(false);
            Window window=dialog.getWindow();
//            摄者背景透明
            assert window != null;
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//            设置dialog出现时,背景不会变暗
            WindowManager.LayoutParams lp=window.getAttributes();
            lp.dimAmount=0f;
            window.setAttributes(lp);
//            取消window的悬浮效果(在取消上面的背景阴影后,dialog本身也不是透明时,dialog在v21自带一个悬浮效果,这个可以取消悬浮效果)
            window.setElevation(0);
        }    
       
    }

填坑:

1,怎么设置diolog的宽度

//获得屏幕的实例
        Display d=getWindowManager().getDefaultDisplay();
//获得窗体的属性
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
//设置Dialog距离底部的距离
        lp.y = 20;
//设置diolog的宽度位屏幕宽度
        Point point=new Point();
        d.getSize(point);
        lp.width=point.x;
//将属性设置给窗体
        dialogWindow.setAttributes(lp);

获取屏幕宽度

可以通过Point=d.getSize(),point.x和point.y就是屏幕的宽度和高度

也可以直接通过安卓内置的参数

LayoutParams.match_Parent或者LayoutParams.wrap_content.

https://blog.csdn.net/liuhaomatou/article/details/22899925/

2.设置一个AlertDialog

AlertDialog.Builder builder=new AlertDialog.Builder(getContext());
                builder.setMessage("确定退出吗");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(), "确定退出", Toast.LENGTH_SHORT).show();
                        OkHttp3Utils.sendHttpLoginOutRequest(new Callback() {
                            @Override
                            public void onFailure(Call call, IOException e) {
                               
                            }

                            @Override
                            public void onResponse(Call call, Response response) throws IOException {
                                    if (response.isSuccessful()){
                                        String strResponse=response.body().string();
                                        LogU.i(TAG, "onResponse: response="+strResponse);
                                        System.exit(0);
                                    }
                            }
                        });
                    }
                });
                builder.setNegativeButton("取消", null);
                builder.show();

参考如何通过dialog退出程序

https://www.jb51.net/article/79128.htm

dialogFragment d的再学习

资料  详细解读DialogFragment - 千个太阳在手中 - 博客园

创建dialogView

有两种方式,一个是重写fragment内部的onCreateView()方法,另一个是重写内部的onCreateDialog()

从生命周期来看,onCreateDailo()在前,onCreateDialog()在后,但是不要同时使用这两个方法

使用DialogFragment

show(FragmentManager manager,Tag tag)

 new DialogFragmentTest()
        .show(getFragmentManager(), "dialog_fragment");

如何让Fragment和activity通信

让activity实现一个接口,在Fragment中通过getActivity()获取活动,并调用活动实现的接口方法,把数据传递出去.

DialogFragment的生命周期以及执行顺序

onAttach

onCreate

onCreateDialog

onCreateView

onstart

在摸索的过程中发现的小技巧

1 执行了onCreateDialog会覆盖onCreateView

2 执行onCreateView,相当于是在一个默认的Dialog中填充自己的View

这个Dialog有标题,可以在onCreateView()中通过代码去除

getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

修改dialog的宽度

Android 自定义 DialogFragment 宽度问题_ 玄月初心的博客-CSDN博客_dialogfragment 宽度

默认Dialog的大小是wrap方式的,如果需要设置dialog窗口的大小和摆放位置,需要重写onStart()方法,在onCreateView中重写无效

 @Override
    public void onStart() {
        Dialog dialog = getDialog();
        if (dialog!=null){
            Window window=getDialog().getWindow();
//            设置窗口大小
            window.setLayout(DataUtil.windowWidth, WindowManager.LayoutParams.WRAP_CONTENT);
//            设置窗口的位置
            window.setGravity(Gravity.BOTTOM);
//            设置窗口的背景为透明
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//            设置窗口距离底部50
            WindowManager.LayoutParams lp = window.getAttributes();
            lp.y=50;
            window.setAttributes(lp);
        }
       
        super.onStart();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值