Commit bfeeddea by 王宇航

登陸框修改

parent 52572e0b
package com.gingersoft.gsa.cloud.ui.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.utils.screen.ConvertDpAndPx;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Wyh on 2019/12/19.
*/
public class MyEditText extends RelativeLayout {
private Context context;
//輸入最大長度
private int maxLeght;
private String maxLengthTip;
//是否顯示輸入最大字數限制
private boolean isShowMaxLenght;
private int maxLenghtTextColor;
private int maxLenghtTextSize;
private int maxTextMarginLeft;
private int maxTextMarginRight;
private int maxTextMarginTop;
private int maxTextMarginBottom;
//是否允許輸入表情
private boolean isInputIcon;
//輸入表情時提示的內容,不設置內容不提示
private String inputIconTipText;
private String hint;
private int hintColor;
private int edTextColor;
private String edText;
private int edTextSize;
//清除按鈕的大小
private int clearIconSiZe;
//清除按鈕圖標
private Drawable clearIcon;
//清除按鈕右間距
private int clearRightMargin;
//清除按鈕點擊事件
private OnClickListener clearOnClickListener;
//查看密碼按鈕圖標兩種狀態
private Drawable lookIconUncheck;
private Drawable lookIconChecked;
//"查看密碼"圖標的大小
private int lookIconSiZe;
//查看密碼按鈕右間距
private int lookRightMargin;
//查看密碼按鈕點擊事件
private OnClickListener lookOnClickListener;
private int btnMarginTop;
private int btnMarginRight;
private int btnMarginBottom;
private int btnMarginLeft;
//設置輸入密碼替換符
private String pwdChar;
//是否換行
private boolean singleLine;
private int inputType;
private int contentGravity;
private int btnGravity;
private EditText editText;
//顯示最大字數的textview
private TextView maxLenghtTextView;
private ImageView ivClear;
private CheckBox ivLook;
private List<InputFilter> mInputFilter = new ArrayList<>();
private AsteriskPasswordTransformationMethod passwordTransformationMethod;
public MyEditText(Context context) {
this(context, null);
}
public MyEditText(Context context, AttributeSet attrs) {
this(context, attrs, -1);//R.attr.editTextStyle
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyEditText);
maxLeght = typedArray.getInt(R.styleable.MyEditText_ed_MaxLength, 0);
maxLengthTip = typedArray.getString(R.styleable.MyEditText_ed_MaxLengthTip);
isShowMaxLenght = typedArray.getBoolean(R.styleable.MyEditText_ed_showMaxLenght, false);
maxLenghtTextColor = typedArray.getColor(R.styleable.MyEditText_ed_maxLengthTextColor, 0x10);
maxLenghtTextSize = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthTextSize, 12));
isInputIcon = typedArray.getBoolean(R.styleable.MyEditText_ed_isInputIcon, false);
inputIconTipText = typedArray.getString(R.styleable.MyEditText_ed_putIconTip);
clearIconSiZe = typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_clearIconSize, 0);
clearIcon = typedArray.getDrawable(R.styleable.MyEditText_ed_clearRes);
clearRightMargin = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_clearMarginRight, 0));
lookIconUncheck = typedArray.getDrawable(R.styleable.MyEditText_ed_lookIcon_uncheck);
lookIconChecked = typedArray.getDrawable(R.styleable.MyEditText_ed_lookIcon_checked);
lookIconSiZe = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_lookIconSize, 0));
lookRightMargin = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_lookMarginRight, 0));
pwdChar = typedArray.getString(R.styleable.MyEditText_ed_pwdChar);
singleLine = typedArray.getBoolean(R.styleable.MyEditText_ed_singLeLine, false);
inputType = typedArray.getInteger(R.styleable.MyEditText_inputType, 0);
contentGravity = typedArray.getInteger(R.styleable.MyEditText_ed_gravity, 0);
maxTextMarginLeft = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginLeft, 0));
maxTextMarginRight = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginRight, 0));
maxTextMarginTop = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginTop, 0));
maxTextMarginBottom = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginBottom, 0));
btnGravity = typedArray.getInteger(R.styleable.MyEditText_ed_clear_gravity, 2);
btnMarginTop = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginTop, 0));
btnMarginRight = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginRight, 0));
btnMarginBottom = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginBottom, 0));
btnMarginLeft = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginLeft, 0));
hint = typedArray.getString(R.styleable.MyEditText_ed_hint);
hintColor = typedArray.getColor(R.styleable.MyEditText_ed_hintColor, 0x10);
edTextColor = typedArray.getColor(R.styleable.MyEditText_ed_textColor, 0x10);
edText = typedArray.getString(R.styleable.MyEditText_ed_text);
edTextSize = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_textSize, 12));
typedArray.recycle();
initLeght();
initEditText();
initClearIcon();
initLookIcon();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = 0;
for (int i = 0; i < getChildCount(); i++) {
View childView = getChildAt(i);
measureChild(childView, widthMeasureSpec, heightMeasureSpec);
height += childView.getMeasuredHeight();
}
setMeasuredDimension(widthMeasureSpec, height);
}
private void initEditText() {
if (!isInputIcon) {
mInputFilter.add(new EmojiInputFilter());
}
editText = new EditText(context);
editText.setText(edText);
editText.setTextColor(edTextColor);
editText.setHint(hint);
editText.setHintTextColor(hintColor);
editText.setTextSize(edTextSize);
editText.setGravity(contentGravity);
InputFilter[] inputFilters = new InputFilter[mInputFilter.size()];
for (int i = 0; i < mInputFilter.size(); i++) {
inputFilters[i] = mInputFilter.get(i);
}
editText.setFilters(inputFilters);
if (!TextUtils.isEmpty(pwdChar)) {
passwordTransformationMethod = new AsteriskPasswordTransformationMethod();
editText.setTransformationMethod(passwordTransformationMethod);//必須在setsingleLine之後才有效
}
if (inputType != 0) {
editText.setInputType(inputType);
}
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
editText.setPadding(0, 0, clearIconSiZe + lookIconSiZe + clearRightMargin + lookRightMargin, 0);
editText.setBackgroundColor(0);
editText.setLayoutParams(params);
// editText.setSingleLine();這個方法會改變edittext的TransformationMethod,不適用
if (singleLine) {
editText.setMaxLines(1);
editText.setHorizontallyScrolling(true);
} else {
editText.setMaxLines(Integer.MAX_VALUE);
//水平滚动设置为False
editText.setHorizontallyScrolling(false);
}
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
setMaxLengthText(editable.toString().length());
if (ivClear != null) {
if (editable.toString().length() > 0) {
ivClear.setVisibility(VISIBLE);
} else {
ivClear.setVisibility(GONE);
}
}
}
});
this.addView(editText);
}
/**
* 初始化查看密碼按鈕
*/
private void initLookIcon() {
if (lookIconUncheck != null) {
ivLook = new CheckBox(context);
LayoutParams ivLookParams = getImgLayoutParams(lookIconSiZe, lookIconSiZe, lookRightMargin);
ivLook.setButtonDrawable(null);
if (ivClear != null) {
ivLookParams.rightMargin = clearIconSiZe + lookRightMargin + clearRightMargin;
} else {
ivLookParams.rightMargin = lookRightMargin;
}
ivLook.setLayoutParams(ivLookParams);
ivLook.setBackground(lookIconUncheck);
this.addView(ivLook);
ivLook.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
ivLook.setBackground(lookIconChecked);
editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
ivLook.setBackground(lookIconUncheck);
if (passwordTransformationMethod == null) {
editText.setTransformationMethod(new PasswordTransformationMethod());
} else {
editText.setTransformationMethod(passwordTransformationMethod);//讓密碼顯示為*
}
}
editText.setSelection(editText.getText().toString().length());
if (lookOnClickListener != null) {
lookOnClickListener.onClick(buttonView);
}
});
}
}
/**
* 初始化清空按鈕
*/
private void initClearIcon() {
if (clearIcon != null) {
ivClear = new ImageView(context);
ivClear.setImageDrawable(clearIcon);
ivClear.setLayoutParams(getImgLayoutParams(clearIconSiZe, clearIconSiZe, clearRightMargin));
this.addView(ivClear);
//有了內容才顯示清除按鈕
ivClear.setVisibility(GONE);
ivClear.setOnClickListener(view -> {
editText.setText("");
if (clearOnClickListener != null) {
clearOnClickListener.onClick(view);
}
});
}
}
public EditText getEditText() {
return editText;
}
public void setEditText(EditText editText) {
this.editText = editText;
}
public Editable getText() {
return editText.getText();
}
public EditText setText(String text){
editText.setText(text);
return editText;
}
private void setMaxLengthText(int currentLenght) {
if (maxLenghtTextView != null)
maxLenghtTextView.setText(currentLenght + "/" + maxLeght);
}
private LayoutParams getImgLayoutParams(int widht, int height, int rightMargin) {
LayoutParams params;
if (widht == 0) {
params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
} else {
params = new LayoutParams(widht, height);
}
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
switch (btnGravity) {
case 1:
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
break;
case 2:
params.addRule(RelativeLayout.CENTER_VERTICAL);
break;
case 3:
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
break;
}
params.setMargins(btnMarginLeft, btnMarginTop, btnMarginRight, btnMarginBottom);
params.rightMargin = rightMargin;
return params;
}
/**
* 初始化長度監聽和長度顯示文字
*/
private void initLeght() {
if (maxLeght > 0) {
mInputFilter.add(new MaxTextLengthFilter(maxLeght));
}
if (isShowMaxLenght) {
maxLenghtTextView = new TextView(context);
maxLenghtTextView.setTextColor(maxLenghtTextColor);
maxLenghtTextView.setTextSize(maxLenghtTextSize);
LayoutParams textParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
textParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
textParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
textParams.setMargins(maxTextMarginLeft, maxTextMarginTop, maxTextMarginRight, maxTextMarginBottom);
maxLenghtTextView.setLayoutParams(textParams);
setMaxLengthText(0);
this.addView(maxLenghtTextView);
}
}
/**
* 检测是否有emoji表情
*
* @param source
* @return
*/
private boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}
/**
* 判断是否是Emoji
*
* @param codePoint 比较的单个字符
* @return
*/
private boolean isEmojiCharacter(char codePoint) {
return codePoint == 0x0 || codePoint == 0x9 || codePoint == 0xA || codePoint == 0xD || codePoint >= 0x20 && codePoint <= 0xD7FF || codePoint >= 0xE000 && codePoint <= 0xFFFD;
}
public void setClearOnClickListener(OnClickListener clearOnClickListener) {
this.clearOnClickListener = clearOnClickListener;
}
public void setLookOnClickListener(OnClickListener lookOnClickListener) {
this.lookOnClickListener = lookOnClickListener;
}
//最大字數限制器
class MaxTextLengthFilter implements InputFilter {
private int mMaxLength;
public MaxTextLengthFilter(int max) {
mMaxLength = max;
}
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
int keep = mMaxLength - (dest.length() - (dend - dstart));
if (keep < (end - start)) {
if (!TextUtils.isEmpty(maxLengthTip)) {
// ToastUtils.showShort();
Toast.makeText(context, maxLengthTip, Toast.LENGTH_SHORT).show();
}
}
if (keep <= 0) {
return "";
} else if (keep >= end - start) {
return null;
} else {
return source.subSequence(start, start + keep);
}
}
}
class EmojiInputFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (containsEmoji(source.toString())) {
//如果輸入了表情
if (!TextUtils.isEmpty(inputIconTipText)) {
//提示文字不為空,就彈出提示,並移除掉表情
// ToastUtils.showShort(inputIconTipText);
Toast.makeText(context, inputIconTipText, Toast.LENGTH_SHORT).show();
return "";
}
return "";
}
return source;
}
}
//替換密碼輸入框顯示的密碼樣式
public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
return new PasswordCharSequence(source);
}
private class PasswordCharSequence implements CharSequence {
private CharSequence mSource;
public PasswordCharSequence(CharSequence source) {
mSource = source;
}
public char charAt(int index) {
return pwdChar.charAt(0);
}
public int length() {
return mSource.length();
}
public CharSequence subSequence(int start, int end) {
return mSource.subSequence(start, end);
}
}
}
}
//package com.gingersoft.gsa.cloud.ui.view;
//
//import android.content.Context;
//import android.content.res.TypedArray;
//import android.graphics.drawable.Drawable;
//import android.text.Editable;
//import android.text.InputFilter;
//import android.text.Spanned;
//import android.text.TextUtils;
//import android.text.TextWatcher;
//import android.text.method.HideReturnsTransformationMethod;
//import android.text.method.PasswordTransformationMethod;
//import android.util.AttributeSet;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.CheckBox;
//import android.widget.EditText;
//import android.widget.ImageView;
//import android.widget.RelativeLayout;
//import android.widget.TextView;
//import android.widget.Toast;
//
//import com.gingersoft.gsa.cloud.base.R;
//import com.gingersoft.gsa.cloud.base.utils.screen.ConvertDpAndPx;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * Created by Wyh on 2019/12/19.
// */
//public class MyEditText extends RelativeLayout {
//
// private Context context;
// //輸入最大長度
// private int maxLeght;
//
// private String maxLengthTip;
// //是否顯示輸入最大字數限制
// private boolean isShowMaxLenght;
// private int maxLenghtTextColor;
// private int maxLenghtTextSize;
// private int maxTextMarginLeft;
// private int maxTextMarginRight;
// private int maxTextMarginTop;
// private int maxTextMarginBottom;
// //是否允許輸入表情
// private boolean isInputIcon;
// //輸入表情時提示的內容,不設置內容不提示
// private String inputIconTipText;
//
// private String hint;
// private int hintColor;
// private int edTextColor;
// private String edText;
// private int edTextSize;
// //清除按鈕的大小
// private int clearIconSiZe;
// //清除按鈕圖標
// private Drawable clearIcon;
// //清除按鈕右間距
// private int clearRightMargin;
// //清除按鈕點擊事件
// private OnClickListener clearOnClickListener;
//
// //查看密碼按鈕圖標兩種狀態
// private Drawable lookIconUncheck;
//
// private Drawable lookIconChecked;
//
// //"查看密碼"圖標的大小
// private int lookIconSiZe;
// //查看密碼按鈕右間距
// private int lookRightMargin;
// //查看密碼按鈕點擊事件
// private OnClickListener lookOnClickListener;
//
// private int btnMarginTop;
// private int btnMarginRight;
// private int btnMarginBottom;
// private int btnMarginLeft;
//
//
// //設置輸入密碼替換符
// private String pwdChar;
// //是否換行
// private boolean singleLine;
//
// private int inputType;
//
// private int contentGravity;
//
// private int btnGravity;
// private EditText editText;
// //顯示最大字數的textview
// private TextView maxLenghtTextView;
//
// private ImageView ivClear;
// private CheckBox ivLook;
//
//
// private List<InputFilter> mInputFilter = new ArrayList<>();
//
// private AsteriskPasswordTransformationMethod passwordTransformationMethod;
//
// public MyEditText(Context context) {
// this(context, null);
// }
//
// public MyEditText(Context context, AttributeSet attrs) {
// this(context, attrs, -1);//R.attr.editTextStyle
// }
//
// public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
// super(context, attrs, defStyleAttr);
// this.context = context;
// TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyEditText);
// maxLeght = typedArray.getInt(R.styleable.MyEditText_ed_MaxLength, 0);
// maxLengthTip = typedArray.getString(R.styleable.MyEditText_ed_MaxLengthTip);
// isShowMaxLenght = typedArray.getBoolean(R.styleable.MyEditText_ed_showMaxLenght, false);
// maxLenghtTextColor = typedArray.getColor(R.styleable.MyEditText_ed_maxLengthTextColor, 0x10);
// maxLenghtTextSize = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthTextSize, 12));
// isInputIcon = typedArray.getBoolean(R.styleable.MyEditText_ed_isInputIcon, false);
// inputIconTipText = typedArray.getString(R.styleable.MyEditText_ed_putIconTip);
// clearIconSiZe = typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_clearIconSize, 0);
// clearIcon = typedArray.getDrawable(R.styleable.MyEditText_ed_clearRes);
// clearRightMargin = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_clearMarginRight, 0));
// lookIconUncheck = typedArray.getDrawable(R.styleable.MyEditText_ed_lookIcon_uncheck);
// lookIconChecked = typedArray.getDrawable(R.styleable.MyEditText_ed_lookIcon_checked);
// lookIconSiZe = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_lookIconSize, 0));
// lookRightMargin = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_lookMarginRight, 0));
// pwdChar = typedArray.getString(R.styleable.MyEditText_ed_pwdChar);
// singleLine = typedArray.getBoolean(R.styleable.MyEditText_ed_singLeLine, false);
// inputType = typedArray.getInteger(R.styleable.MyEditText_inputType, 0);
// contentGravity = typedArray.getInteger(R.styleable.MyEditText_ed_gravity, 0);
//
// maxTextMarginLeft = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginLeft, 0));
// maxTextMarginRight = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginRight, 0));
// maxTextMarginTop = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginTop, 0));
// maxTextMarginBottom = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_maxLengthMarginBottom, 0));
// btnGravity = typedArray.getInteger(R.styleable.MyEditText_ed_clear_gravity, 2);
//
// btnMarginTop = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginTop, 0));
// btnMarginRight = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginRight, 0));
// btnMarginBottom = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginBottom, 0));
// btnMarginLeft = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_btn_marginLeft, 0));
//
// hint = typedArray.getString(R.styleable.MyEditText_ed_hint);
// hintColor = typedArray.getColor(R.styleable.MyEditText_ed_hintColor, 0x10);
// edTextColor = typedArray.getColor(R.styleable.MyEditText_ed_textColor, 0x10);
// edText = typedArray.getString(R.styleable.MyEditText_ed_text);
// edTextSize = ConvertDpAndPx.Px2Dp(context, typedArray.getDimensionPixelSize(R.styleable.MyEditText_ed_textSize, 12));
//
// typedArray.recycle();
//
// initLeght();
// initEditText();
// initClearIcon();
// initLookIcon();
// }
//
// @Override
// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// int height = 0;
// for (int i = 0; i < getChildCount(); i++) {
// View childView = getChildAt(i);
// measureChild(childView, widthMeasureSpec, heightMeasureSpec);
// height += childView.getMeasuredHeight();
// }
// setMeasuredDimension(widthMeasureSpec, height);
// }
//
// private void initEditText() {
// if (!isInputIcon) {
// mInputFilter.add(new EmojiInputFilter());
// }
// editText = new EditText(context);
// editText.setText(edText);
// editText.setTextColor(edTextColor);
// editText.setHint(hint);
// editText.setHintTextColor(hintColor);
// editText.setTextSize(edTextSize);
// editText.setGravity(contentGravity);
// InputFilter[] inputFilters = new InputFilter[mInputFilter.size()];
// for (int i = 0; i < mInputFilter.size(); i++) {
// inputFilters[i] = mInputFilter.get(i);
// }
// editText.setFilters(inputFilters);
// if (!TextUtils.isEmpty(pwdChar)) {
// passwordTransformationMethod = new AsteriskPasswordTransformationMethod();
// editText.setTransformationMethod(passwordTransformationMethod);//必須在setsingleLine之後才有效
// }
// if (inputType != 0) {
// editText.setInputType(inputType);
// }
//
// LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// editText.setPadding(0, 0, clearIconSiZe + lookIconSiZe + clearRightMargin + lookRightMargin, 0);
// editText.setBackgroundColor(0);
// editText.setLayoutParams(params);
//// editText.setSingleLine();這個方法會改變edittext的TransformationMethod,不適用
// if (singleLine) {
// editText.setMaxLines(1);
// editText.setHorizontallyScrolling(true);
// } else {
// editText.setMaxLines(Integer.MAX_VALUE);
// //水平滚动设置为False
// editText.setHorizontallyScrolling(false);
// }
//
// editText.addTextChangedListener(new TextWatcher() {
// @Override
// public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//
// }
//
// @Override
// public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//
// }
//
// @Override
// public void afterTextChanged(Editable editable) {
// setMaxLengthText(editable.toString().length());
// if (ivClear != null) {
// if (editable.toString().length() > 0) {
// ivClear.setVisibility(VISIBLE);
// } else {
// ivClear.setVisibility(GONE);
// }
// }
// }
// });
// this.addView(editText);
// }
//
// /**
// * 初始化查看密碼按鈕
// */
// private void initLookIcon() {
// if (lookIconUncheck != null) {
// ivLook = new CheckBox(context);
// LayoutParams ivLookParams = getImgLayoutParams(lookIconSiZe, lookIconSiZe, lookRightMargin);
// ivLook.setButtonDrawable(null);
// if (ivClear != null) {
// ivLookParams.rightMargin = clearIconSiZe + lookRightMargin + clearRightMargin;
// } else {
// ivLookParams.rightMargin = lookRightMargin;
// }
//
// ivLook.setLayoutParams(ivLookParams);
// ivLook.setBackground(lookIconUncheck);
//
// this.addView(ivLook);
// ivLook.setOnCheckedChangeListener((buttonView, isChecked) -> {
// if (isChecked) {
// ivLook.setBackground(lookIconChecked);
// editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
// } else {
// ivLook.setBackground(lookIconUncheck);
// if (passwordTransformationMethod == null) {
// editText.setTransformationMethod(new PasswordTransformationMethod());
// } else {
// editText.setTransformationMethod(passwordTransformationMethod);//讓密碼顯示為*
// }
// }
// editText.setSelection(editText.getText().toString().length());
// if (lookOnClickListener != null) {
// lookOnClickListener.onClick(buttonView);
// }
// });
// }
// }
//
// /**
// * 初始化清空按鈕
// */
// private void initClearIcon() {
// if (clearIcon != null) {
// ivClear = new ImageView(context);
// ivClear.setImageDrawable(clearIcon);
// ivClear.setLayoutParams(getImgLayoutParams(clearIconSiZe, clearIconSiZe, clearRightMargin));
// this.addView(ivClear);
// //有了內容才顯示清除按鈕
// ivClear.setVisibility(GONE);
// ivClear.setOnClickListener(view -> {
// editText.setText("");
// if (clearOnClickListener != null) {
// clearOnClickListener.onClick(view);
// }
// });
// }
// }
//
// public EditText getEditText() {
// return editText;
// }
//
// public void setEditText(EditText editText) {
// this.editText = editText;
// }
//
// public Editable getText() {
// return editText.getText();
// }
//
// public EditText setText(String text){
// editText.setText(text);
// return editText;
// }
//
// private void setMaxLengthText(int currentLenght) {
// if (maxLenghtTextView != null)
// maxLenghtTextView.setText(currentLenght + "/" + maxLeght);
// }
//
//
// private LayoutParams getImgLayoutParams(int widht, int height, int rightMargin) {
// LayoutParams params;
// if (widht == 0) {
// params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
// } else {
// params = new LayoutParams(widht, height);
// }
// params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
// switch (btnGravity) {
// case 1:
// params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
// break;
// case 2:
// params.addRule(RelativeLayout.CENTER_VERTICAL);
// break;
// case 3:
// params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
// break;
// }
// params.setMargins(btnMarginLeft, btnMarginTop, btnMarginRight, btnMarginBottom);
// params.rightMargin = rightMargin;
// return params;
// }
//
// /**
// * 初始化長度監聽和長度顯示文字
// */
// private void initLeght() {
// if (maxLeght > 0) {
// mInputFilter.add(new MaxTextLengthFilter(maxLeght));
// }
// if (isShowMaxLenght) {
// maxLenghtTextView = new TextView(context);
// maxLenghtTextView.setTextColor(maxLenghtTextColor);
// maxLenghtTextView.setTextSize(maxLenghtTextSize);
// LayoutParams textParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// textParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
// textParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
// textParams.setMargins(maxTextMarginLeft, maxTextMarginTop, maxTextMarginRight, maxTextMarginBottom);
// maxLenghtTextView.setLayoutParams(textParams);
// setMaxLengthText(0);
// this.addView(maxLenghtTextView);
// }
// }
//
// /**
// * 检测是否有emoji表情
// *
// * @param source
// * @return
// */
// private boolean containsEmoji(String source) {
// int len = source.length();
// for (int i = 0; i < len; i++) {
// char codePoint = source.charAt(i);
// if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
// return true;
// }
// }
// return false;
// }
//
// /**
// * 判断是否是Emoji
// *
// * @param codePoint 比较的单个字符
// * @return
// */
// private boolean isEmojiCharacter(char codePoint) {
// return codePoint == 0x0 || codePoint == 0x9 || codePoint == 0xA || codePoint == 0xD || codePoint >= 0x20 && codePoint <= 0xD7FF || codePoint >= 0xE000 && codePoint <= 0xFFFD;
// }
//
//
// public void setClearOnClickListener(OnClickListener clearOnClickListener) {
// this.clearOnClickListener = clearOnClickListener;
// }
//
//
// public void setLookOnClickListener(OnClickListener lookOnClickListener) {
// this.lookOnClickListener = lookOnClickListener;
// }
//
// //最大字數限制器
// class MaxTextLengthFilter implements InputFilter {
// private int mMaxLength;
//
// public MaxTextLengthFilter(int max) {
// mMaxLength = max;
// }
//
// public CharSequence filter(CharSequence source, int start, int end,
// Spanned dest, int dstart, int dend) {
// int keep = mMaxLength - (dest.length() - (dend - dstart));
// if (keep < (end - start)) {
// if (!TextUtils.isEmpty(maxLengthTip)) {
//// ToastUtils.showShort();
// Toast.makeText(context, maxLengthTip, Toast.LENGTH_SHORT).show();
// }
// }
// if (keep <= 0) {
// return "";
// } else if (keep >= end - start) {
// return null;
// } else {
// return source.subSequence(start, start + keep);
// }
// }
// }
//
// class EmojiInputFilter implements InputFilter {
//
// @Override
// public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// if (containsEmoji(source.toString())) {
// //如果輸入了表情
// if (!TextUtils.isEmpty(inputIconTipText)) {
// //提示文字不為空,就彈出提示,並移除掉表情
//// ToastUtils.showShort(inputIconTipText);
// Toast.makeText(context, inputIconTipText, Toast.LENGTH_SHORT).show();
// return "";
// }
// return "";
// }
// return source;
// }
// }
//
// //替換密碼輸入框顯示的密碼樣式
// public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
// @Override
// public CharSequence getTransformation(CharSequence source, View view) {
// return new PasswordCharSequence(source);
// }
//
// private class PasswordCharSequence implements CharSequence {
// private CharSequence mSource;
//
// public PasswordCharSequence(CharSequence source) {
// mSource = source;
// }
//
// public char charAt(int index) {
// return pwdChar.charAt(0);
// }
//
// public int length() {
// return mSource.length();
// }
//
// public CharSequence subSequence(int start, int end) {
// return mSource.subSequence(start, end);
// }
// }
// }
//
//
//}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="edit_text_size">18dp</dimen>
<dimen name="edit_text_size">18sp</dimen>
<dimen name="load_dialog_text_size">16dp</dimen>
<!-- font -->
......
......@@ -2,25 +2,28 @@ package com.gingersoft.gsa.cloud.user.login.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.user.login.R;
import com.gingersoft.gsa.cloud.user.login.R2;
import com.gingersoft.gsa.cloud.user.login.di.component.DaggerLoginComponent;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.view.MyEditText;
import java.io.IOException;
import java.util.List;
......@@ -54,9 +57,13 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
*/
public class LoginActivity extends BaseActivity<LoginPresenter> implements LoginContract.View, View.OnClickListener {
@BindView(R2.id.ed_login_user_account)
MyEditText edAccount;
EditText edAccount;
@BindView(R2.id.ed_login_user_pwd)
MyEditText edPwd;
EditText edPwd;
@BindView(R2.id.iv_clear_pwd)
ImageView icClear;
@BindView(R2.id.iv_clear_account)
ImageView icClearAccount;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -80,6 +87,47 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
// jumpActivity();
// finish();
// }
edPwd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (edPwd.getText().equals("")) {
icClear.setVisibility(View.GONE);
} else {
icClear.setVisibility(View.VISIBLE);
}
}
});
edAccount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (edAccount.getText().equals("")) {
icClearAccount.setVisibility(View.GONE);
} else {
icClearAccount.setVisibility(View.VISIBLE);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
......@@ -137,11 +185,11 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
@Override
public void loginSuccess(LoginBean loginBean) {
if (loginBean.getData() != null ) {
if (loginBean.getData() != null) {
GsaCloudApplication.setLoginToken(LoginActivity.this, loginBean.getData().getToken());
if(loginBean.getData().getUser() != null) {
if (loginBean.getData().getUser() != null) {
GsaCloudApplication.setMemberId(LoginActivity.this, loginBean.getData().getUser().getUserId());
GsaCloudApplication.setMemberName(LoginActivity.this, loginBean.getData().getUser().getUserName());
......@@ -154,7 +202,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
.setOnItemClickListener(new ChooseRestaurantDialog.BottomListSheetBuilder.OnItemClickListener() {
@Override
public void onItemClick(ChooseRestaurantDialog dialog,SectionTextItem item, int position) {
public void onItemClick(ChooseRestaurantDialog dialog, SectionTextItem item, int position) {
GsaCloudApplication.setRestaurantId(LoginActivity.this, item.getId());
GsaCloudApplication.setRestaurantName(LoginActivity.this, item.getText());
jumpActivity();
......@@ -217,7 +265,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
}
@Override
@OnClick({R.id.tv_gsa_user_login})
@OnClick({R.id.tv_gsa_user_login, R.id.iv_clear_pwd, R.id.iv_clear_account})
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_gsa_user_login:
......@@ -226,6 +274,16 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
mPresenter.login(edAccount.getText().toString(), edPwd.getText().toString());
}
break;
case R.id.iv_clear_account:
//清空賬號框
edAccount.setText("");
icClearAccount.setVisibility(View.GONE);
break;
case R.id.iv_clear_pwd:
//清空密碼框
edPwd.setText("");
icClear.setVisibility(View.GONE);
break;
}
}
......
......@@ -31,26 +31,37 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/login_title" />
<com.gingersoft.gsa.cloud.ui.view.MyEditText
<EditText
android:id="@+id/ed_login_user_account"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="10dp"
app:ed_MaxLength="11"
app:ed_clearIconSize="30dp"
app:ed_clearRes="@mipmap/ic_clear_text"
app:ed_hint="請輸入賬戶"
app:ed_hintColor="@color/user_login_edit_color"
app:ed_isInputIcon="false"
app:ed_singLeLine="true"
app:ed_textColor="#333"
app:ed_textSize="@dimen/edit_text_size"
android:background="@null"
android:hint="請輸入賬戶"
android:maxLength="11"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:singleLine="true"
android:textColor="@color/theme_333_color"
android:textColorHint="@color/user_login_edit_color"
android:textSize="@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf="@id/login_icon"
app:layout_constraintLeft_toRightOf="@id/login_icon"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintRight_toLeftOf="@id/iv_clear_account"
app:layout_constraintTop_toTopOf="@id/login_icon" />
<ImageView
android:id="@+id/iv_clear_account"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_10"
android:src="@mipmap/ic_clear_text"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/ed_login_user_account"
app:layout_constraintLeft_toRightOf="@id/ed_login_user_account"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_login_user_account" />
<ImageView
android:id="@+id/iv_login_pwd_icon"
android:layout_width="40dp"
android:layout_height="40dp"
......@@ -62,27 +73,38 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_login_user_account" />
<com.gingersoft.gsa.cloud.ui.view.MyEditText
<EditText
android:id="@+id/ed_login_user_pwd"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#00000000"
android:padding="10dp"
app:ed_MaxLength="16"
app:ed_clearIconSize="30dp"
app:ed_clearRes="@mipmap/ic_clear_text"
app:ed_hint="請輸入密碼"
app:ed_hintColor="@color/user_login_edit_color"
app:ed_isInputIcon="false"
app:ed_singLeLine="true"
app:ed_textColor="#333"
app:ed_textSize="@dimen/edit_text_size"
app:inputType="textPassword"
android:gravity="center_vertical"
android:hint="請輸入密碼"
android:inputType="textPassword"
android:maxLength="16"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:singleLine="true"
android:textColor="@color/theme_333_color"
android:textColorHint="@color/user_login_edit_color"
android:textSize="@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf="@id/iv_login_pwd_icon"
app:layout_constraintLeft_toRightOf="@id/iv_login_pwd_icon"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintRight_toLeftOf="@id/iv_clear_pwd"
app:layout_constraintTop_toTopOf="@id/iv_login_pwd_icon" />
<ImageView
android:id="@+id/iv_clear_pwd"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_10"
android:src="@mipmap/ic_clear_text"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/ed_login_user_pwd"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_login_user_pwd" />
<TextView
android:id="@+id/tv_forget_pwd"
android:layout_width="wrap_content"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment