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();
                }
            });
        }
    

      

  • 相关阅读:
    设计模式(Design Pattern)扫盲
    SharePoint 2007 采用表单验证 (1) 失败:(
    发布一款给图片批量加水印的程序PicNet V1.0
    转篇文章,VS2005开发的dll如何安装进GAC
    cnblogs排名进入1500,纪念一下
    转载一篇提高baidu/google收录的文章
    关于.NET(C#)中字符型(Char)与数字类型的转换, CLR via c# 读书笔记
    《天风文章》V1.2.0 新闻/文章类asp.net2.0站点系统源码 (100%开源)
    推荐个.Net的论坛系统 Discuz!NT
    C#实现对图片加水印的一段代码.
  • 原文地址:https://www.cnblogs.com/yangms/p/10059849.html
Copyright © 2011-2022 走看看