androdi簡單的密碼輸入對話方塊(Dialog)
加入:
compile 'com.flyco.dialog:FlycoDialog_Lib:[email protected]'
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();
相關推薦
androdi簡單的密碼輸入對話方塊(Dialog)
加入: compile 'com.flyco.dialog:FlycoDialog_Lib:[email protected]' Dialog程式碼: package com.influx.kalyke.component; /** * Created
四種對話方塊(dialog)的簡單使用方法
有普通對話方塊,單選對話方塊,複選對話方塊,進度條的兩種實現方法話不多說,直接上程式碼 activity_main.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.constra
html5+css實現六位數字密碼輸入對話方塊(類似支付寶,微信)
先來看看原型圖:直接上程式碼:html<div class="common-part pay-part"> <div class="common-dialog pay-dialog"> <div class
win7訪問xp的共享,彈出重輸入密碼的對話方塊(NTLM)
最近在研究 NTLM 的東東,無意發現一博文,實乃 NTLM 應用之例項, 故轉之,再次感謝原創者! --------------------------------------------------------------------------------------
GUI之練習——列出指定目錄下的內容和對話方塊(Dialog)
package myclass; import java.awt.; import java.awt.event.; import java.io.*; class MyWindowDemo { private Frame f; private TextFiel
jquery 對話方塊(Dialog)外掛
<!doctype html> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <
android 8種對話方塊(Dialog)使用方法彙總
目錄 1.寫在前面2.程式碼示例 2.1 普通Dialog(圖1與圖2) 2.2 列表Dialog(圖3) 2.3 單選Dialog(圖4) 2.4 多選Dialog(圖5) 2.5 等待Dialog(圖6) 2.6 進度條Dialog(圖7) 2.7 編輯Dialog(圖8) 2.8 自定義Dialo
android 實現點選輸入框彈出日期選擇對話方塊(DatePickerDialog)
前言 這裡我們實現一個功能,點選日期輸入框(EditText),即可彈出日期選擇對話方塊(DatePickerDialog),等使用者選擇日期後,將使用者選擇的日期顯示在日期輸入框。 1.activity_main.xml 這裡只有一個TextView和EditText。
Android中的對話方塊(AlertDialog)
建立android中分體式對話方塊需要四個步驟: 第一:獲得AlertDialog的靜態內部類Builder物件,有該類建立對話方塊。 第二:通過Builder物件設定對話方塊的標題,按鈕UI及將要響應的事件。、 第三:呼叫Builder的Create()方法建立對對話方塊 第四
android模式進度對話方塊(ProgressDialog)的呼叫方法
public class MainActivity extends AppCompatActivity { @BindView(R.id.button2) Button button2; @BindView(R.id.button1) TextView
PyQt5 筆記6 -- 對話方塊(QDialog)
PyQt5 筆記6 – 對話方塊(QDialog) 1、主視窗彈出對話方塊 import sys from PyQt5.QtWidgets import QApplication, QMainWin
Java-記事本程式、檔案選擇對話方塊(JFileChooser)
基本的GUI基礎和IO基礎 核心程式碼 JFileChooser jfc = new JFileChooser(); jfc.setDialogTitle("另存為..."); // jfc.showOpenDialog(null); // 顯示開啟檔案
MFC 對話方塊(視窗)透明
程式的實現步驟基本就是這樣,當然也有其他方法。希望大家能積極開拓,展示更多方法。 SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHw
在對話方塊(CDialog)中使用分割窗(CSplitterWnd)
原文見: 可以使用以下三個步驟在對話方塊中建立分割窗: 1. In the OnCreate function or your CDialog, register a new WindowClass by calling "AfxRegisterWndClass".
VC++對話方塊(CDialog)新增背景圖片
在對話方塊(CDialog)程式中,為了讓程式看上去漂亮一些,我們可以為對話方塊新增一個好看的背景圖片,要想完成這個目標,可以利用afx_msg BOOLOnEraseBkgnd (CDC* pDC) 這個函式。 (1)找來一張合適的BMP格式的背景圖片,將其放在工程的r
VC++對話方塊(CDialog)的全屏顯示及控制元件居中顯示
在編寫一些軟體時,我們會比較偏向於比較簡潔、清新的使用者介面,同時為了避免其它程式或者桌面等影響使用者的注意力等,我們通常習慣將軟體介面全屏,佈滿整個顯示螢幕,與此同時,我們也將對介面中的控制元件位置進行相應的調整,讓它們按螢幕的大小和其在對話方塊中的相對位置,居中顯示。
QT學習 之 對話方塊 (四) 字型對話方塊、訊息對話方塊、檔案對話方塊、程序對話方塊
QMessageBox類: 含有Question訊息框、Information訊息框、Warning訊息框和Critical訊息框等 通常有兩種方式可以來建立標準訊息對話方塊: 一種是採用“基於屬性”的API,一種是使用QMessageBox的靜態方法。 後者書寫容易,但缺
QT學習 之 對話方塊 (一) 可擴充套件對話方塊
QT中的對話方塊是QDialog類 下面是三個主要的視窗的區別: QWidget類是所有使用者介面物件的基類。 視窗部件是使用者介面的一個基本單元:它從視窗系統接收滑鼠、鍵盤和其它事件,並且在螢幕上繪製自己。每一個視窗部件都是矩形的,並且它們按Z軸順序排列。一個視窗部件可以
標準對話方塊(QMessageBox)
所謂標準對話方塊,是 Qt 內建的一系列對話方塊,用於簡化開發。事實上,有很多對話方塊都是通用的,比如開啟檔案、設定顏色、列印設定等。這些對話方塊在所有程式中幾乎相同,因此沒有必要在每一個程式
MUI-dialog(對話方塊),警告框、確認框、輸入對話方塊、訊息提示框
本文主要講述dialog(對話方塊),包括:警告框、確認框、輸入對話方塊、訊息提示框四類。 元件名 作用 alert 警告框 confirm 確認框