Android dialog使用详解,设置dialog位置,设置dialog尺寸大小,设置dialog进出动画,设置加载动画

android:minWidth="340dp"

 

private ProgressDialog progressDialog;
  private void initProgressDialog() {
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("");
//        progressDialog.setCancelable(true);
//        progressDialog.setCanceledOnTouchOutside(true);
        progressDialog.setCancelable(false);
        progressDialog.setCanceledOnTouchOutside(false);
    }

    public void showProgressDialog(String msg) {
        runOnUiThread(() -> {
            progressDialog.setMessage(msg);
            progressDialog.show();
        });
    }

    public void dismissProgressDialog() {
        runOnUiThread(() -> {
            try {
                if (progressDialog != null && progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
            } catch (Exception e) {

            }
        });
    }

自定义Dialog

public class LoginDialog implements View.OnClickListener {
    private Activity activity;
    private final View view;
    private Dialog dialog;
    EditText etAccount;
    EditText etPass;

    public LoginDialog(Activity activity) {
        this.activity = activity;
        view = LayoutInflater.from(activity).inflate(R.layout.dialog_login,
                null);
        etAccount = view.findViewById(R.id.et_account);
        etPass = view.findViewById(R.id.et_pass);
        view.findViewById(R.id.ll_dialog).setOnClickListener(this);

        dialog = new Dialog(activity, R.style.my_style_dialog);
        dialog.setContentView(view);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);


    }

    public boolean loginAble() {
        String name = etAccount.getText().toString().trim();
        String pass = etPass.getText().toString().trim();
        if (!name.equals(PrefHelper.getDefault().getString(PreferenceKeys.ACCOUNT, Constant.DEFAULT_ACCOUNT))) {
            ToastUtil.showOne(activity, "账号或密码不正确");
            return false;
        }
        if (!pass.equals(PrefHelper.getDefault().getString(PreferenceKeys.PASSWORD, Constant.DEFAULT_PASS))) {
            ToastUtil.showOne(activity, "账号或密码不正确");
            return false;
        }
        return true;
    }

    public void setPostClickListener(View.OnClickListener clickListener) {
        view.findViewById(R.id.bt_post).setOnClickListener(clickListener);
    }

    public void show() {
        dialog.show();
    }

    public void dismiss() {
        dialog.dismiss();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ll_dialog:
                dismiss();
                break;
        }
    }


}

 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll_dialog"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#aa000000"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/normal_600dp"
        android:layout_gravity="center"
        android:layout_margin="@dimen/normal_100dp"
        android:background="#fff"
        android:orientation="vertical">

样式

<style name="my_style_dialog">
    <item name="android:background">#00000000</item>
    <!-- 设置自定义布局的背景透明 -->
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 设置window背景透明,也就是去边框 -->

</style>

1、自定义My_LoadingDialog

/**
 * 作者:created by meixi
 * 邮箱:13164716840@163.com
 * 日期:2018/11/30 09
 */

public class My_LoadingDialog extends Dialog {
    private static Context mContext;
    private static class SingletonHolder {
        private static final My_LoadingDialog INSTANCE = new My_LoadingDialog(mContext);
    }

     AnimationDrawable animationDrawable;
    private My_LoadingDialog (Context context){
        super(context, R.style.WhiteDialog);
        init();
    }
    public static final My_LoadingDialog getInstance(Context context) {
        mContext = context;
        return SingletonHolder.INSTANCE;
    }
//    public My_LoadingDialog(Context context) {
//        super(context, R.style.loading_dialog);
//        init();
//    }

    private void init() {
        setContentView(R.layout.dialog_share);//dialog布局layout
//        LinearLayout linearLayout = findViewById(R.id.lyWechat);
//
//        ImageView iv = (ImageView)findViewById(R.id.sss);
//
//        iv.setImageResource(R.drawable.ring_animation);
//          animationDrawable = (AnimationDrawable) iv.getDrawable();
//        animationDrawable.start();//帧动画
//
//        linearLayout.setOnClickListener(new View.OnClickListener() {//dialog事件
//            @Override
//            public void onClick(View view) {
//                Log.i("lgq","sfdsfsdfsd");
//                Toast.makeText(mContext,"SFDSF",Toast.LENGTH_SHORT).show();
//                animationDrawable.stop();
//            }
//        });

//        setCancelable(false);
    }

    @Override
    public void show() {
        if (!this.isShowing())
            try {
                super.show();
//                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND );//去除dialog阴影背景
//                animationDrawable.start();//帧动画
            }catch (Exception e) {
                e.printStackTrace();
            }
    }

    @Override
    public void dismiss() {
        if (this.isShowing())
            try {
                super.dismiss();
            }catch (Exception e) {
                e.printStackTrace();
            }
    }
}

帧动画,京东加载动画:Android 帧动画,加载动画,AnimationDrawable,仿京东加载动画_meixi_android的博客-CSDN博客

2、style文件

<style name="WhiteDialog">
    <!-- 是否有边框 -->
    <item name="android:windowFrame">@null</item>
    <!--<item name="android:windowFrame">@drawable/border_dialog</item>-->
    <!--<item name="windowBackground">@drawable/border_dialog</item>-->
    <!--是否在悬浮Activity之上  -->
    <item name="android:windowIsFloating">true</item>
    <!--标题  -->
    <item name="android:windowNoTitle">true</item>
    <!--阴影  -->
    <item name="android:windowIsTranslucent">true</item><!--半透明-->
    <!-- 进入和退出的动画 -->
    <item name="android:windowAnimationStyle">@style/MyDialogAnimation</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 点外边可以消失  -->
    <item name="android:windowCloseOnTouchOutside">true</item>
</style>

3、activity调用自定义dialog

private More_LoadDialog mMore_loadDialog;
        mMy_loadingDialog = My_LoadingDialog.getInstance(this);

        Window dialogWindow =mMy_loadingDialog.getWindow();
        dialogWindow.setGravity(Gravity.BOTTOM);//设置dialog位置——上、中、下
//        dialogWindow.setWindowAnimations(R.style.MyDialogAnimation);//设置dialog进出动画

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int nMultiple = dm.widthPixels;//屏幕宽

        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        lp.width =nMultiple-140; // 宽度
        lp.height =  ViewGroup.LayoutParams.WRAP_CONTENT; // 高度
        lp.alpha=1f;//dialog透明度
        dialogWindow.setAttributes(lp);//设置dialog大小,长宽尺寸

4、dialog进出屏幕动画

进入屏幕动画文件

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="400"
        android:fromYDelta="200%p"
        android:toYDelta="0" />

   <!--  <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" /> -->

</set>

退出屏幕动画

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="500"
        android:fromYDelta="0"
        android:toYDelta="100%p" />

</set>
 

(2)动画样式style

<style name="MyDialogAnimation">
    <!--进入 -->
    <item name="android:windowEnterAnimation">@anim/x_in</item>
    <!--退出-->
    <item name="android:windowExitAnimation">@anim/x_out</item>
</style>

更多动画样式:Android activity跳转动画,6种activity进入动画_meixi_android的博客-CSDN博客_activity 进入动画

5、底部Dialog进出动画

translate_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="100%"
        android:toYDelta="0"
        android:duration="200" >
    </translate>
</set>

translate_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="100%"
        android:duration="200" >
    </translate>
</set>

<style name="animTranslate">
    <item name="android:windowEnterAnimation">@anim/translate_in</item>
    <item name="android:windowExitAnimation">@anim/translate_out</item>
</style>

PopupWindow win=ggwindow.getPopupWindow();
win.setAnimationStyle(R.style.animTranslate);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值