类似支付宝支付密码的edittext

来源:互联网 发布:mac好用的rar解压软件 编辑:程序博客网 时间:2024/05/01 13:23
public class PayPwdEditText extends RelativeLayout{    private EditText editText; //文本编辑框    private Context context;    private LinearLayout linearLayout; //文本密码的文本    private TextView[] textViews; //文本数组    private int pwdlength = 6; //密码长度, 默认6    private OnTextFinishListener onTextFinishListener;    public PayPwdEditText(Context context) {        this(context, null);    }    public PayPwdEditText(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public PayPwdEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.context = context;    }    /**     * @param bgdrawable 背景drawable     * @param pwdlength 密码长度     * @param splilinewidth 分割线宽度     * @param splilinecolor 分割线颜色     * @param pwdcolor 密码字体颜色     * @param pwdsize 密码字体大小     */    public void initStyle(int bgdrawable, int pwdlength, float splilinewidth, int splilinecolor, int pwdcolor, int pwdsize)    {        this.pwdlength = pwdlength;        initEdit(bgdrawable);        initShowInput(bgdrawable, pwdlength, splilinewidth, splilinecolor, pwdcolor, pwdsize);    }    /**     * 初始化编辑框     * @param bgcolor     */    private void initEdit(int bgcolor)    {        editText = new EditText(context);        editText.setBackgroundResource(bgcolor);        editText.setCursorVisible(false);//选中也没有光标        editText.setTextSize(0);        editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD | InputType.TYPE_CLASS_NUMBER);        editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(pwdlength)});//限制字数        editText.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {                Editable etext = editText.getText();                Selection.setSelection(etext, etext.length());//定位光标在最后位置            }            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {            }            @Override            public void afterTextChanged(Editable s) {                initDatas(s);                if(s.length() == pwdlength)                {                    if(onTextFinishListener != null)                    {                        onTextFinishListener.onFinish(s.toString().trim());                    }                }            }        });        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);        addView(editText, lp);    }    /**     * @param bgcolor 背景drawable     * @param pwdlength 密码长度     * @param slpilinewidth 分割线宽度     * @param splilinecolor 分割线颜色     * @param pwdcolor 密码字体颜色     * @param pwdsize 密码字体大小     */    public void initShowInput(int bgcolor, int pwdlength, float slpilinewidth, int splilinecolor, int pwdcolor, int pwdsize)    {        //添加密码框父布局        linearLayout = new LinearLayout(context);        linearLayout.setBackgroundResource(bgcolor);        LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);        linearLayout.setLayoutParams(layoutParams);        linearLayout.setOrientation(LinearLayout.HORIZONTAL);        addView(linearLayout);        //添加密码框        textViews = new TextView[pwdlength];        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT);        params.weight = 1;        params.gravity = Gravity.CENTER;        LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(dip2px(context, slpilinewidth),LayoutParams.MATCH_PARENT);        for(int i = 0; i < textViews.length; i++)        {            final int index = i;            TextView textView = new TextView(context);            textView.setGravity(Gravity.CENTER);            textViews[i] = textView;            textViews[i].setTextSize(pwdsize);            textViews[i].setTextColor(context.getResources().getColor(pwdcolor));            // 设置textview的格式为数字和密码型         
            textViews[i].setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_VARIATION_PASSWORD);            linearLayout.addView(textView, params);            if(i < textViews.length - 1)            {                View view = new View(context);                view.setBackgroundColor(context.getResources().getColor(splilinecolor));                linearLayout.addView(view, params2);            }        }    }    /**     * 是否显示明文     * @param showPwd     */    public void setShowPwd(boolean showPwd) {        int length = textViews.length;        for(int i = 0; i < length; i++) {            if (showPwd) {                textViews[i].setTransformationMethod(PasswordTransformationMethod.getInstance());//密码隐式            } else {                textViews[i].setTransformationMethod(HideReturnsTransformationMethod.getInstance());//密码显式            }        }    }    /**     * 设置显示类型     * @param type     */    public void setInputType(int type)    {        int length = textViews.length;        for(int i = 0; i < length; i++) {            textViews[i].setInputType(type);        }    }   /**     * 清除文本框     */    public void clearText()    {        editText.setText("");        for(int i = 0; i < pwdlength; i++)        {            textViews[i].setText("");        }    }    public void setOnTextFinishListener(OnTextFinishListener onTextFinishListener) {        this.onTextFinishListener = onTextFinishListener;    }    /**     * 根据输入字符,显示密码个数     * @param s     */    public void initDatas(Editable s)    {        if(s.length() > 0)        {            int length = s.length();            for(int i = 0; i < pwdlength; i++)            {                if(i < length)                {                    for(int j = 0; j < length; j++)                    {                        char ch = s.charAt(j);                        textViews[j].setText(String.valueOf(ch));                    }                }                else                {                    textViews[i].setText("");                }            }        }        else        {            for(int i = 0; i < pwdlength; i++)            {                textViews[i].setText("");            }        }    }    public String getPwdText()    {        if(editText != null)            return editText.getText().toString().trim();        return "";    }    public static int dip2px(Context context, float dipValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (dipValue * scale + 0.5f);    }    public interface OnTextFinishListener    {        void onFinish(String str);    }}
0 0
原创粉丝点击