Commit bfeeddea by 王宇航

登陸框修改

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