自定义EditText,包含可输入的字体总数与还可以输入多少字体数

自定义EditText(输入框字数限制并显示还能输入多少字)
下方代码是自定义EditText主要内容

public class CustomEditTextView extends LinearLayout {

    private int edittextMaxNumber;
    private EditText mEditText;
    private View mLines;
    private TextView mTextView;
    private Context context;
    private OnNumberWordsCallBack mOnNumberWordsCallBack;//回调

    public OnNumberWordsCallBack getmOnNumberWordsCallBack() {
        return mOnNumberWordsCallBack;
    }

    public void setmOnNumberWordsCallBack(OnNumberWordsCallBack mOnNumberWordsCallBack) {
        this.mOnNumberWordsCallBack = mOnNumberWordsCallBack;
    }

    public CustomEditTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        setOrientation(LinearLayout.VERTICAL);
        intEditText(context);
        intLines(context);
        intTextView(context);

        TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.CustomEditTextView);
        if (attributes != null) {
            //处理edittext
            edittextMaxNumber = attributes.getInt(R.styleable.CustomEditTextView_edittext_max_number, 200);
            mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(edittextMaxNumber)});

            String hintText = attributes.getString(R.styleable.CustomEditTextView_edittext_hint_text);
            if (!TextUtils.isEmpty(hintText)) {
                mEditText.setHint(hintText);
            }
            //获取标题显示颜色
            int hintTextColor = attributes.getColor(R.styleable.CustomEditTextView_edittext_hint_color, Color.BLACK);
            mEditText.setHintTextColor(hintTextColor);

            //获取标题显示颜色
            float edittextDimension = attributes.getDimension(R.styleable.CustomEditTextView_edittext_size, 20);
            // Log.w("hanshuai", "CustomEditTextView:edittextDimension==== "+edittextDimension);
            mEditText.setTextSize(px2dip(context, edittextDimension));
            int edittextTextColor = attributes.getColor(R.styleable.CustomEditTextView_edittext_color, Color.BLACK);
            mEditText.setTextColor(edittextTextColor);

            //获取标题显示颜色
            int linesColor = attributes.getColor(R.styleable.CustomEditTextView_lines_color, Color.BLACK);
            mLines.setBackgroundColor(linesColor);

            int textviewColor = attributes.getColor(R.styleable.CustomEditTextView_textview_text_color, Color.BLACK);
            mTextView.setTextColor(textviewColor);
            float textviewDimension = attributes.getDimension(R.styleable.CustomEditTextView_textview_text_size, 15);
            // Log.w("hanshuai", "CustomEditTextView:textviewDimension==== "+textviewDimension);

            mTextView.setTextSize(px2dip(context, textviewDimension));
            mTextView.setText(0 + "/" + edittextMaxNumber);

            attributes.recycle();
        }
    }

    private void intEditText(Context context) {
        mEditText = new EditText(context);
        LinearLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 0, 1.0f);
        mEditText.setLayoutParams(lp);
        mEditText.addTextChangedListener(mTextWatcher);
        mEditText.setBackgroundColor(getResources().getColor(R.color.transparent));
        mEditText.setGravity(Gravity.TOP);

        addView(mEditText);
    }

    private void intLines(Context context) {
        mLines = new View(context);
        LinearLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 1, 0.0f);
        mLines.setLayoutParams(lp);
        addView(mLines);

    }

    private void intTextView(Context context) {
        mTextView = new TextView(context);
        LinearLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.0f);
        mTextView.setLayoutParams(lp);
        mTextView.setGravity(Gravity.RIGHT);
        mTextView.setPadding(0, 50, 0, 0);

        addView(mTextView);

    }

    TextWatcher mTextWatcher = new TextWatcher() {
        private CharSequence temp;
        private int editStart;
        private int editEnd;

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            temp = s;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {
            String editable = mEditText.getText().toString();
            String str = stringFilter(editable);
            if (!editable.equals(str)) {
                Toast.makeText(context, "请输入合法字符", Toast.LENGTH_SHORT).show();
                mEditText.setText(str);
                //设置新的光标所在位置
                mEditText.setSelection(str.length());
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            int nowLength = mEditText.getText().length();
            mTextView.setText(nowLength + "/" + edittextMaxNumber);
            if (nowLength == 0) {
                mOnNumberWordsCallBack.onLessZero();
            } else {
                mOnNumberWordsCallBack.onGreaterZero();

            }

        }
    };

    public String getEditTextString() {
        String editaString = mEditText.getText().toString();
        return editaString;
    }


    /**
     * 设置edittext 最大输入字符限制
     *
     * @param number 最大数量
     */
    public void setEditMaxNumber(int number) {
        edittextMaxNumber = number;
        mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(edittextMaxNumber)});
        mTextView.setText(0 + "/" + number);


    }

    /**
     * 设置edittext 提示文本
     *
     * @param hintText
     */
    public void setEditHintText(String hintText) {

        if (!TextUtils.isEmpty(hintText)) {
            mEditText.setHint(hintText);
        }

    }

    /**
     * 设置editText文本
     *
     * @param str
     */
    public void setEditTextString(String str) {
        mEditText.setText(str);
    }

    /**
     * 匹配正则表达式,中英文数字符号
     *
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static String stringFilter(String str) throws PatternSyntaxException {
        // 只允许字母、数字和汉字标点
        //String   regEx  =  ~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& amp;*()——+|{}【】‘;:”“’。,、?]";
        String regEx = "[^a-zA-Z0-9\u4E00-\u9FA5\\p{P}]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }


   /* public void setTitleClickListener(OnClickListener onClickListener) {
        if (onClickListener != null) {
            titleBarLeftBtn.setOnClickListener(onClickListener);
            titleBarRightBtn.setOnClickListener(onClickListener);
        }
    }*/

    public EditText getmEditText() {
        return mEditText;
    }

    public View getmLines() {
        return mLines;
    }

    public TextView getmTextView() {
        return mTextView;
    }

    public TextWatcher getmTextWatcher() {
        return mTextWatcher;
    }

    /**
     * 输入框字数大于0和等于0
     */
    public interface OnNumberWordsCallBack {
        /**
         * 大于0
         */
        void onGreaterZero();

        /**
         * 等于0
         */
        void onLessZero();
    }
}
<declare-styleable name =“CustomEditTextView”>
        <attr name =“edittext_max_number”format =“integer”/>
        <attr name =“edittext_hint_text”format =“string”/>
        <attr name =“edittext_color”format =“color”/>
        <attr name =“edittext_size”format =“dimension”/>
        <attr name =“edittext_hint_color”format =“color”/>
        <attr name =“lines_color”format =“color”/>
        <attr name =“textview_text_color”format =“color”/>
        <attr name =“textview_text_size”format =“dimension”/>

</declare-styleable>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值