Android积累工具类

1、Dialog的一些总结

1.1 android自带的ProgressDialog

下面是效果图

这个应该是最基本的了,使用方法也很简单

首先可以在Activity里创建一个全局的 ProgressDialog 实例。

 private ProgressDialog mProgressDialog;

接着是创建和取消ProgressDialog的代码

private void createOrShowDialog() {
        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("加载中...");
            mProgressDialog.create();
            mProgressDialog.show();
        } else {
            mProgressDialog.show();
        }
    }

    private void dismissDialog() {
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
        }
    }

最后只要在本Activity里调用即可。

1.2 开源库AVLoadingIndicatorView的使用

这个库实现的加载动画感觉比较酷炫,链接其github地址,可以查看所有的加载动画,以及他的加载流程。

下面是我自己实现的一个效果

记录一下我自己使用这个开源库流程,方便查阅。

首先在App bulid.gradle里面添加依赖

implementation 'com.wang.avi:library:2.1.3'

接着在layout里创建一个dialog_loading.xml,用来显示。

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout 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="match_parent"
    android:layout_gravity="center">

    <com.wang.avi.AVLoadingIndicatorView
        android:id="@+id/avi"
        style="@style/AVLoadingIndicatorView.Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        app:indicatorColor="#FF0000"
        app:indicatorName="LineSpinFadeLoaderIndicator" />
</RelativeLayout>

如果要改变动画的样式,只需要改变上面代码的app:indicatorName="LineSpinFadeLoaderIndicator"即可,别的样式的加载动画可以查看这个地址。上面也有使用教程,可以看看。

创建一个dialog的style

 <!--加载中动画AVLoadingIndicatorView-->
    <style name="TransparentDialog" parent="@android:style/Theme.Holo.Light.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

接着创建一个LoadingIndicatorDialog类,让它继承AlertDialog

public class LoadingIndicatorDialog extends AlertDialog {

    private static LoadingIndicatorDialog loadingDialog;
    private AVLoadingIndicatorView avi;

    public static LoadingIndicatorDialog createAndSetDialog(Context context) {
        loadingDialog= new LoadingIndicatorDialog(context, R.style.TransparentDialog); //设置AlertDialog背景透明
        loadingDialog.setCancelable(true);//点击返回键是否结束 true结束 false不会结束动画
        loadingDialog.setCanceledOnTouchOutside(true);//点击对话框外是否结束  true结束 false不会结束动画
        return loadingDialog;
    }

    public LoadingIndicatorDialog(Context context, int themeResId) {
        super(context,themeResId);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.dialog_loading_indicator);
        avi = (AVLoadingIndicatorView) this.findViewById(R.id.avi);
    }

    @Override
    public void show() {
        super.show();
        avi.show();
    }

    @Override
    public void dismiss() {
        super.dismiss();
        avi.hide();
    }
}

使用的话也很简单

 LoadingIndicatorDialog mLID = LoadingIndicatorDialog.createAndSetDialog(this);
                mLID.show();
                mLID.dismiss();

这样就可以在任何Activity里调用。

1.3 FlycoDialog

这个开源库我实现一个下面的效果,当然还有很多。其他的效果可以看看官方github

首先,需要添加依赖:

 implementation 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'

详细内容可以查看这个开源框架,gitHub地址为:https://github.com/H07000223/FlycoDialog_Master

public class DialogUtils {

    public interface OnOkOrCancelClickListener{
        void clickLeftCancelButton();

        void clickRightOKButton();
    }

    public static void createDialogForPortrait(Context context, String content, final OnOkOrCancelClickListener onOkOrCancelClickListener) {
        final NormalDialog dialog = new NormalDialog(context);
        dialog.isTitleShow(false)//
                .bgColor(Color.parseColor("#383838"))//
                .cornerRadius(5)//
                .content(content)//
                .contentGravity(Gravity.CENTER)//
                .contentTextColor(Color.parseColor("#ffffff"))//
                .dividerColor(Color.parseColor("#222222"))//
                .btnTextSize(15.5f, 15.5f)//
                .btnTextColor(Color.parseColor("#ffffff"), Color.parseColor("#ffffff"))//
                .btnPressColor(Color.parseColor("#2B2B2B"))//
                .widthScale(0.8f)//
                .autoDismiss(false)
                .show();
        dialog.setCanceledOnTouchOutside(false);//点击屏幕外是否小时dialog,true消失,false不消失
        dialog.setOnBtnClickL(
                new OnBtnClickL() {
                    @Override
                    public void onBtnClick() {
                        onOkOrCancelClickListener.clickLeftCancelButton();
                        if (dialog.isShowing()) {
                            dialog.dismiss();
                        }
                    }
                },
                new OnBtnClickL() {
                    @Override
                    public void onBtnClick() {
                        onOkOrCancelClickListener.clickRightOKButton();
                        if (dialog.isShowing()) {
                            dialog.dismiss();
                        }
                    }
                });
    }

    public static void createDialogForPortrait(Context context,String[] btnTexts, String content, final OnOkOrCancelClickListener onOkOrCancelClickListener) {
        //如果需要显示
        final NormalDialog dialog = new NormalDialog(context);
        dialog.isTitleShow(false)//
                .bgColor(Color.parseColor("#383838"))//
                .cornerRadius(5)//
                .content(content)//
                .contentGravity(Gravity.CENTER)//
                .contentTextColor(Color.parseColor("#ffffff"))//
                .dividerColor(Color.parseColor("#222222"))//
                .btnTextSize(15.5f, 15.5f)//
                .btnTextColor(Color.parseColor("#ffffff"), Color.parseColor("#ffffff"))//
                .btnPressColor(Color.parseColor("#2B2B2B"))//
                .widthScale(0.80f)//
                .btnText(btnTexts)
                .autoDismiss(false)
                .show();
        dialog.setCanceledOnTouchOutside(false);
        dialog.setOnBtnClickL(
                new OnBtnClickL() {
                    @Override
                    public void onBtnClick() {
                        onOkOrCancelClickListener.clickLeftCancelButton();
                        if (dialog.isShowing()) {
                            dialog.dismiss();
                        }
                    }
                },
                new OnBtnClickL() {
                    @Override
                    public void onBtnClick() {
                        onOkOrCancelClickListener.clickRightOKButton();
                        if (dialog.isShowing()) {
                            dialog.dismiss();
                        }
                    }
                });
    }

即可在自己想要用的地方使用,使用方法如下:

 DialogUtils.createDialogForPortrait(MainActivity.this, new String[]{"取消", "确定"},
                        "是否删除!", new DialogUtils.OnOkOrCancelClickListener() {
                            @Override
                            public void clickLeftCancelButton() {
                                Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void clickRightOKButton() {
                                Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
                            }
                        });

 1.4 android自带的AlertDialog

 

       AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
        dialog.setIcon(R.drawable.ic_prompt);
        dialog.setTitle("提示");
        dialog.setMessage("是否退出?");
        dialog.setCancelable(false);//触摸屏幕其他区域是否消失,true可以消失,false不可以
        dialog.setPositiveButton("确定退出", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "退出成功!", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "返回!", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.show();

1.5 自定义AlterDialog 

下面这个是我写的一个自定义AlterDialog,效果图如下:

 

 新建一个layout布局,命名为 dialog_my_way_point.xml,下面是这个布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_gravity="center"
    android:background="@drawable/dialog_circle_angle"
    android:layout_marginHorizontal="25dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:id="@+id/ll_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:layout_marginTop="8dp"
        android:gravity="center"
        android:orientation="horizontal">
        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/ic_prompt"/>
        <TextView
            android:id="@+id/tv_title"
            android:textSize="22sp"
            android:text="提示"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center_horizontal"
            android:textColor="@color/color_blue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_Message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:layout_marginTop="10dp"
        android:layout_below="@id/ll_title"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_content"
            android:textSize="20sp"
            android:text="你还没有选择职业,请选择职业"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center_vertical"
            android:textColor="@color/color_blue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_below="@id/ll_Message"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="10dp"
        android:layout_marginVertical="10dp">
        <TextView
            android:textSize="18sp"
            android:gravity="center"
            android:alpha="1"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <TextView
            android:id="@+id/tv_cancle"
            android:textSize="16sp"
            android:gravity="center"
            android:text="取消"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <TextView
            android:id="@+id/tv_choose_job"
            android:textSize="16sp"
            android:gravity="center"
            android:textColor="@color/color_blue"
            android:text="确定"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    </LinearLayout>

</RelativeLayout>

  再建一个CustomDialog类,使他继承Dialog,下面是代码:

package com.geocompass.customdialog.customdialog;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

/**
 * Created by admin on 2018/7/21.
 */

public class CustomDialog extends Dialog {

    /**
     * 提示
     */
    protected TextView hintTv;

    /**
     * 左边按钮
     */
    protected TextView doubleLeftBtn;

    /**
     * 右边按钮
     */
    protected TextView doubleRightBtn;

    public CustomDialog(Context context) {
        super(context, R.style.CustomDialogStyle);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setCancelable(false);  // 是否可以撤销
        setContentView(R.layout.dialog_my_way_point);
        hintTv = (TextView) findViewById(R.id.tv_content);
        doubleLeftBtn = (TextView) findViewById(R.id.tv_cancle);
        doubleRightBtn = (TextView) findViewById(R.id.tv_choose_job);
        setCanceledOnTouchOutside(true);//点击弹框外的区域关闭
    }

    /**
     * 设置右键文字和点击事件
     *
     * @param rightStr      文字
     * @param clickListener 点击事件
     */
    public void setRightButton(String rightStr, View.OnClickListener clickListener) {
        doubleRightBtn.setOnClickListener(clickListener);
        doubleRightBtn.setText(rightStr);
    }

    /**
     * 设置左键文字和点击事件
     *
     * @param leftStr       文字
     * @param clickListener 点击事件
     */
    public void setLeftButton(String leftStr, View.OnClickListener clickListener) {
        doubleLeftBtn.setOnClickListener(clickListener);
        doubleLeftBtn.setText(leftStr);
    }

    /**
     * 设置提示内容
     *
     * @param str 内容
     */
    public void setHintText(String str) {
        hintTv.setText(str);
        hintTv.setVisibility(View.VISIBLE);
    }

    /**
     * 给两个按钮 设置文字
     *
     * @param leftStr  左按钮文字
     * @param rightStr 右按钮文字
     */
    public void setBtnText(String leftStr, String rightStr) {
        doubleLeftBtn.setText(leftStr);
        doubleRightBtn.setText(rightStr);
    }

    @Override
    public void onBackPressed() {
        dismiss();
    }
}

  其中里面会用到的drawable资源

dialog_circle_angle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 圆角 -->
    <corners
        android:radius="4dp"
        /><!-- 设置圆角半径 -->
    <!-- 填充 -->
    <solid
        android:color="@android:color/white"/><!-- 填充的颜色 -->
</shape>

ic_prompt.xml 是矢量图形

<vector android:height="24dp" android:viewportHeight="1024.0"
    android:viewportWidth="1024.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#d81e06" android:pathData="M512,900.1c-53.4,0 -105.3,-10.4 -154.1,-31.1 -47.2,-20 -89.4,-48.5 -125.8,-84.8 -36.3,-36.3 -64.9,-78.7 -84.8,-125.8 -20.7,-48.8 -31.1,-100.7 -31.1,-154.1 0,-53.4 10.4,-105.3 31.1,-154.1 20,-47.2 48.5,-89.4 84.8,-125.8 36.3,-36.3 78.7,-64.9 125.8,-84.8 48.8,-20.7 100.7,-31.1 154.1,-31.1 53.4,0 105.3,10.4 154.1,31.1 47.2,20 89.4,48.5 125.8,84.8 36.3,36.3 64.9,78.7 84.8,125.8 20.7,48.8 31.1,100.7 31.1,154.1 0,53.4 -10.4,105.3 -31.1,154.1 -20,47.2 -48.5,89.4 -84.8,125.8 -36.3,36.3 -78.7,64.9 -125.8,84.8C617.3,889.6 565.4,900.1 512,900.1zM512,159.7c-92.1,0 -178.6,35.8 -243.7,100.9 -65.1,65.1 -100.9,151.7 -100.9,243.6 0,92.1 35.8,178.6 100.9,243.6 65.1,65.1 151.7,100.9 243.7,100.9 92.1,0 178.6,-35.8 243.7,-100.9 65.1,-65.1 100.9,-151.7 100.9,-243.6 0,-92.1 -35.8,-178.6 -100.9,-243.6C690.6,195.5 604.1,159.7 512,159.7z"/>
    <path android:fillColor="#d81e06" android:pathData="M476.7,260.9l7.5,344.4 53.6,0 7.5,-344.4L476.7,260.9zM481.1,689.5c-8.6,8.4 -12.9,18.5 -12.9,30.5 0,12.2 4.3,22.4 12.9,30.7 8.6,8.3 18.9,12.4 30.9,12.4 12,0 22.3,-4.1 30.9,-12.4 8.6,-8.3 12.9,-18.5 12.9,-30.7 0,-12 -4.3,-22.2 -12.9,-30.5 -8.6,-8.4 -18.9,-12.6 -30.9,-12.6C500,676.9 489.7,681.1 481.1,689.5z"/>
</vector>

  再需要的地方使用如下:

 

  final CustomDialog dialog = new CustomDialog(this);
        dialog.show();
        dialog.setHintText("是否删除?");
        dialog.setLeftButton("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        dialog.setRightButton("确定", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
    }

  

 

posted @ 2018-12-03 17:45  奇遇yms  阅读(323)  评论(0编辑  收藏  举报