zoukankan      html  css  js  c++  java
  • 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();
                }
            });
        }
    

      

  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/yangms/p/10059849.html
Copyright © 2011-2022 走看看