androdi简单的密码输入对话框(Dialog)
来源:互联网 发布:算法是一个什么的集合 编辑:程序博客网 时间:2024/05/21 14:53
加入:
compile 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'
Dialog代码:package com.influx.kalyke.component;/** * Created by lj on 2017/9/6. */import android.content.Context;import android.graphics.Color;import android.view.Gravity;import android.view.View;import android.widget.LinearLayout;import com.flyco.dialog.utils.CornerUtils;import com.flyco.dialog.widget.internal.BaseAlertDialog;import android.content.Context;import android.graphics.Color;import android.view.Gravity;import android.view.View;import android.widget.LinearLayout;import com.flyco.dialog.utils.CornerUtils;import com.flyco.dialog.widget.internal.BaseAlertDialog;@SuppressWarnings("deprecation")public class PassWordDialog extends BaseAlertDialog<PassWordDialog> { /** title underline */ private View mVLineTitle; /** vertical line between btns */ private View mVLineVertical; /** vertical line between btns */ private View mVLineVertical2; /** horizontal line above btns */ private View mVLineHorizontal; /** title underline color(标题下划线颜色) */ private int mTitleLineColor = Color.parseColor("#61AEDC"); /** title underline height(标题下划线高度) */ private float mTitleLineHeight = 1f; /** btn divider line color(对话框之间的分割线颜色(水平+垂直)) */ private int mDividerColor = Color.parseColor("#DCDCDC"); public static final int STYLE_ONE = 0; public static final int STYLE_TWO = 1; private int mStyle = STYLE_ONE; private PasswordInputView passwordInputView; public PassWordDialog(Context context) { super(context); /** default value*/ mTitleTextColor = Color.parseColor("#61AEDC"); mTitleTextSize = 22f; mContentTextColor = Color.parseColor("#383838"); mContentTextSize = 17f; mLeftBtnTextColor = Color.parseColor("#8a000000"); mRightBtnTextColor = Color.parseColor("#8a000000"); mMiddleBtnTextColor = Color.parseColor("#8a000000"); /** default value*/ passwordInputView=new PasswordInputView(context,null); } private String getContentText(){ return passwordInputView.getText()==null?"":passwordInputView.getText().toString(); } @Override public View onCreateView() { /** title */ mTvTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mLlContainer.addView(mTvTitle); /** title underline */ mVLineTitle = new View(mContext); mLlContainer.addView(mVLineTitle); /** content */// mTvContent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,// LinearLayout.LayoutParams.WRAP_CONTENT)); LinearLayout.LayoutParams la=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); la.setMargins(5,10,5,10); passwordInputView.setLayoutParams(la); mLlContainer.addView(passwordInputView); mVLineHorizontal = new View(mContext); mVLineHorizontal.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1)); mLlContainer.addView(mVLineHorizontal); /** btns */ mTvBtnLeft.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1)); mLlBtns.addView(mTvBtnLeft); mVLineVertical = new View(mContext); mVLineVertical.setLayoutParams(new LinearLayout.LayoutParams(1, LinearLayout.LayoutParams.MATCH_PARENT)); mLlBtns.addView(mVLineVertical); mTvBtnMiddle.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1)); mLlBtns.addView(mTvBtnMiddle); mVLineVertical2 = new View(mContext); mVLineVertical2.setLayoutParams(new LinearLayout.LayoutParams(1, LinearLayout.LayoutParams.MATCH_PARENT)); mLlBtns.addView(mVLineVertical2); mTvBtnRight.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1)); mLlBtns.addView(mTvBtnRight); mLlContainer.addView(mLlBtns); return mLlContainer; } @Override public void setUiBeforShow() { super.setUiBeforShow(); /** title */ if (mStyle == STYLE_ONE) { mTvTitle.setMinHeight(dp2px(48)); mTvTitle.setGravity(Gravity.CENTER_VERTICAL); mTvTitle.setPadding(dp2px(15), dp2px(5), dp2px(0), dp2px(5)); mTvTitle.setVisibility(mIsTitleShow ? View.VISIBLE : View.GONE); } else if (mStyle == STYLE_TWO) { mTvTitle.setGravity(Gravity.CENTER); mTvTitle.setPadding(dp2px(0), dp2px(15), dp2px(0), dp2px(0)); } /** title underline */ mVLineTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, dp2px(mTitleLineHeight))); mVLineTitle.setBackgroundColor(mTitleLineColor); mVLineTitle.setVisibility(mIsTitleShow && mStyle == STYLE_ONE ? View.VISIBLE : View.GONE); /** content */ if (mStyle == STYLE_ONE) { mTvContent.setPadding(dp2px(15), dp2px(10), dp2px(15), dp2px(10)); mTvContent.setMinHeight(dp2px(68)); mTvContent.setGravity(mContentGravity); } else if (mStyle == STYLE_TWO) { mTvContent.setPadding(dp2px(15), dp2px(7), dp2px(15), dp2px(20)); mTvContent.setMinHeight(dp2px(56)); mTvContent.setGravity(Gravity.CENTER); } /** btns */ mVLineHorizontal.setBackgroundColor(mDividerColor); mVLineVertical.setBackgroundColor(mDividerColor); mVLineVertical2.setBackgroundColor(mDividerColor); if (mBtnNum == 1) { mTvBtnLeft.setVisibility(View.GONE); mTvBtnRight.setVisibility(View.GONE); mVLineVertical.setVisibility(View.GONE); mVLineVertical2.setVisibility(View.GONE); } else if (mBtnNum == 2) { mTvBtnMiddle.setVisibility(View.GONE); mVLineVertical.setVisibility(View.GONE); } /**set background color and corner radius */ float radius = dp2px(mCornerRadius); mLlContainer.setBackgroundDrawable(CornerUtils.cornerDrawable(mBgColor, radius)); mTvBtnLeft.setBackgroundDrawable(CornerUtils.btnSelector(radius, mBgColor, mBtnPressColor, 0)); mTvBtnRight.setBackgroundDrawable(CornerUtils.btnSelector(radius, mBgColor, mBtnPressColor, 1)); mTvBtnMiddle.setBackgroundDrawable(CornerUtils.btnSelector(mBtnNum == 1 ? radius : 0, mBgColor, mBtnPressColor, -1)); } // --->属性设置 /** set style(设置style) */ public PassWordDialog style(int style) { this.mStyle = style; return this; } /** set title underline color(设置标题下划线颜色) */ public PassWordDialog titleLineColor(int titleLineColor) { this.mTitleLineColor = titleLineColor; return this; } /** set title underline height(设置标题下划线高度) */ public PassWordDialog titleLineHeight(float titleLineHeight_DP) { this.mTitleLineHeight = titleLineHeight_DP; return this; } /** set divider color between btns(设置btn分割线的颜色) */ public PassWordDialog dividerColor(int dividerColor) { this.mDividerColor = dividerColor; return this; }}输入框:
package com.influx.kalyke.component;/** * Created by lj on 2017/9/1. */import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.text.InputFilter;import android.text.InputType;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.util.TypedValue;import android.widget.EditText;import com.influx.kalyke.R;import static android.graphics.Paint.ANTI_ALIAS_FLAG;/** * Desc: * User: tiansj */public class PasswordInputView extends EditText { private static final int defaultContMargin = 5; private static final int defaultSplitLineWidth = 3; private int borderColor = 0xFFCCCCCC; private float borderWidth = 5; private float borderRadius = 3; private int passwordLength = 4; private int passwordColor = 0xFF000000; private float passwordWidth = 8; private float passwordRadius = 3; private Paint passwordPaint = new Paint(ANTI_ALIAS_FLAG); private Paint borderPaint = new Paint(ANTI_ALIAS_FLAG); private int textLength; public PasswordInputView(Context context, AttributeSet attrs) { super(context, attrs); DisplayMetrics dm = getResources().getDisplayMetrics(); borderWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, borderWidth, dm); borderRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, borderRadius, dm); passwordLength = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordLength, dm); passwordWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordWidth, dm); passwordRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordRadius, dm); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PasswordInputView, 0, 0); borderColor = a.getColor(R.styleable.PasswordInputView_pivBorderColor, borderColor); borderWidth = a.getDimension(R.styleable.PasswordInputView_pivBorderWidth, borderWidth); borderRadius = a.getDimension(R.styleable.PasswordInputView_pivBorderRadius, borderRadius); passwordLength = a.getInt(R.styleable.PasswordInputView_pivPasswordLength, passwordLength); passwordColor = a.getColor(R.styleable.PasswordInputView_pivPasswordColor, passwordColor); passwordWidth = a.getDimension(R.styleable.PasswordInputView_pivPasswordWidth, passwordWidth); passwordRadius = a.getDimension(R.styleable.PasswordInputView_pivPasswordRadius, passwordRadius); a.recycle(); borderPaint.setStrokeWidth(borderWidth); borderPaint.setColor(borderColor); passwordPaint.setStrokeWidth(passwordWidth); passwordPaint.setStyle(Paint.Style.FILL); passwordPaint.setColor(passwordColor); this.setInputType(InputType.TYPE_CLASS_NUMBER); this.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); } @Override protected void onDraw(Canvas canvas) { int width = getWidth(); int height = getHeight(); // 外边框 RectF rect = new RectF(0, 0, width, height); borderPaint.setColor(borderColor); canvas.drawRoundRect(rect, borderRadius, borderRadius, borderPaint); // 内容区 RectF rectIn = new RectF(rect.left + defaultContMargin, rect.top + defaultContMargin, rect.right - defaultContMargin, rect.bottom - defaultContMargin); borderPaint.setColor(Color.WHITE); canvas.drawRoundRect(rectIn, borderRadius, borderRadius, borderPaint); // 分割线 borderPaint.setColor(borderColor); borderPaint.setStrokeWidth(defaultSplitLineWidth); for (int i = 1; i < passwordLength; i++) { float x = width * i / passwordLength; canvas.drawLine(x, 0, x, height, borderPaint); } // 密码 float cx, cy = height/ 2; float half = width / passwordLength / 2; for(int i = 0; i < textLength; i++) { cx = width * i / passwordLength + half; canvas.drawCircle(cx, cy, passwordWidth, passwordPaint); } } @Override protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { super.onTextChanged(text, start, lengthBefore, lengthAfter); this.textLength = text.toString().length(); invalidate(); } public int getBorderColor() { return borderColor; } public void setBorderColor(int borderColor) { this.borderColor = borderColor; borderPaint.setColor(borderColor); invalidate(); } public float getBorderWidth() { return borderWidth; } public void setBorderWidth(float borderWidth) { this.borderWidth = borderWidth; borderPaint.setStrokeWidth(borderWidth); invalidate(); } public float getBorderRadius() { return borderRadius; } public void setBorderRadius(float borderRadius) { this.borderRadius = borderRadius; invalidate(); } public int getPasswordLength() { return passwordLength; } public void setPasswordLength(int passwordLength) { this.passwordLength = passwordLength; invalidate(); } public int getPasswordColor() { return passwordColor; } public void setPasswordColor(int passwordColor) { this.passwordColor = passwordColor; passwordPaint.setColor(passwordColor); invalidate(); } public float getPasswordWidth() { return passwordWidth; } public void setPasswordWidth(float passwordWidth) { this.passwordWidth = passwordWidth; passwordPaint.setStrokeWidth(passwordWidth); invalidate(); } public float getPasswordRadius() { return passwordRadius; } public void setPasswordRadius(float passwordRadius) { this.passwordRadius = passwordRadius; invalidate(); }}用法,和NormalDialog用法一致:
final PassWordDialog p = new PassWordDialog(mainActivityActivity);p.title("请输入验证码") .btnText("取消", "确定")// .btnTextColor(Color.GRAY, Color.GREEN) .style(NormalDialog.STYLE_TWO)// .titleTextSize(23)// .widthScale(0.4f) .showAnim(new BounceTopEnter())// .dismissAnim(new SlideBottomExit())// .show();
阅读全文
0 0
- androdi简单的密码输入对话框(Dialog)
- dialog 的简单使用(简单的弹出一个对话框)
- 连接WIFI时输入密码的Dialog
- 71 Androdi WebView 的简单使用(一)
- JavaScript 简单对话框的使用(提交,确认,输入对话框)
- 几种简单的Dialog对话框
- Android的对话框----(Dialog)
- 关闭开机输入密码对话框的解决方法
- Android Dialog(对话框中获取输入框的内容)
- 实现简单输入支付密码的输入
- 记简单的输入框输入密码
- java实现弹出认证输入框(弹出一个带有用户名和密码输入的对话框)
- Android开发--WIFI输入密码Dialog的实现
- Android开发--WIFI输入密码Dialog的实现
- Android 带密码输入界面的Dialog实现机制
- FlycoDialog 简单实用的自定义Android弹窗对话框(Dialog)
- Dialogplus——简单的Android dialog对话框控
- Android中简单仿iPhone的Dialog对话框
- vimの 多行修改单词
- bootstrap-treeview 实现全选父节点下所有子节点及反选
- PHP设计模式-单例模式
- 思维导图速成记忆法,考试复习必备
- android自定义三个按钮的dialog对话框
- androdi简单的密码输入对话框(Dialog)
- jvm类加载机制
- 进程间通讯方式
- Linux fstab修改不当导致开机fsck失败而主机无法重启
- Unity滚轮控制UI和摄像机缩放冲突问题
- 二叉树的遍历
- Oracle 游标使用全解
- Android序列化
- js禁用上下文菜单的代码