Android登录注册流程实战开发

来源:互联网 发布:西北工业大学矩阵论 编辑:程序博客网 时间:2024/05/16 19:21

token的概念

早期的移动端开发,部分公司使用与web端的cookie身份验证技术,踩了许多坑,现在大多数公司都是采用token,那么这个token到底是个什么东西呢?

token实际上相当于用户的唯一标示,请求网络时携带token可以请求到属于自己的数据,不同的token绑定不同的账号,注册成功后,服务端会下发这个token,那么客户端只好在本地保存好这个token即可.



作者:任珉豪
链接:http://www.jianshu.com/p/b57db3cd5ffb
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


电话号码\密码输入框禁止输入空格等edittext 有一个监听器,addTextChangedListener,在onTextChanged这个方法里做文章即可,下面贴出具体代码:public static void setEditTextInhibitInputSpace(CharSequence editTextString , EditText editText ,int start){ if (editTextString.toString().contains(" ")) { String[] str = editTextString.toString().split(" "); String str1 = ""; for (int i = 0; i < str.length; i++) { str1 += str[i]; } editText.setText(str1); editText.setSelection(start); }}点击输入框,界面跟随键盘滑动效果这样做的目的主要是为了防止界面的输入布局等被软键盘遮挡住.第一步:在清单文件中配置软键盘的属性android:windowSoftInputMode="stateVisible|adjustResize|stateAlwaysHidden"第二步:在xml布局文件中加入scrollview的节点scrollview 包裹的内容就是你要滑动的范围.第三步:在代码里设置键盘的setOnTouchListener监听调用scrollview的滑动代码即可作者:任珉豪链接:http://www.jianshu.com/p/b57db3cd5ffb來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。public void changeScrollView() { new Handler().postDelayed(new Runnable() { @Override public void run() { mScrollView.scrollTo(0, mScrollView.getHeight() - ResourcesUtil.getDimenPxSize(R.dimen.dim_190_dp)); } }, handlerTime);}点击空白,键盘消失这个主要是给你的根布局设置一个点击事件,直接调用隐藏键盘的方法即可.隐藏键盘代码如下: public static void hideSoftKeyboard(Activity taget) { InputMethodManager manager = ((InputMethodManager) taget.getSystemService(Activity.INPUT_METHOD_SERVICE)); if (manager != null && taget.getCurrentFocus() != null) { manager.hideSoftInputFromWindow(taget.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); }}全局获取验证码倒计时通常获取验证码,都是在本页面倒计时,有时产品设计成要全局倒计时,那么倒计时逻辑就要写在外面的类,通过eventbus发送验证码倒计时的时间,在activity接受eventbus事件,并做出相应的逻辑,具体代码较多,这里不再赘述,get思路即可.界面点击手机物理按键无效的设置 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { return false;}键盘禁止复制粘贴\带有清空按钮这里是采用的自定义控件来做,具体代码如下: public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher {// EditText右侧的删除按钮private Drawable mClearDrawable; /** * 控件是否有焦点 */ private boolean hasFocus;public ClearEditText(Context context) { this(context, null);}public ClearEditText(Context context, AttributeSet attrs) { //这里构造方法也很重要,不加这个很多属性不能再XML里面定义 this(context, attrs, android.R.attr.editTextStyle);}public ClearEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); setLongClickable(false); setTextIsSelectable(false); setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } });}private void init() { // 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片,获取图片的顺序是左上右下(0,1,2,3,) mClearDrawable = getCompoundDrawables()[2]; if (mClearDrawable == null) { mClearDrawable = getResources().getDrawable(R.drawable.selector_edittext_delete); } int width = mClearDrawable.getIntrinsicWidth(); int height = mClearDrawable.getIntrinsicHeight(); mClearDrawable.setBounds(0, 0, width, height); // 默认设置隐藏图标 setClearIconVisible(false); // 设置焦点改变的监听 setOnFocusChangeListener(this); // 设置输入框里面内容发生改变的监听 addTextChangedListener(this);}/* @说明:isInnerWidth, isInnerHeight为true,触摸点在删除图标之内,则视为点击了删除图标 event.getX() 获取相对应自身左上角的X坐标 event.getY() 获取相对应自身左上角的Y坐标 getWidth() 获取控件的宽度 getHeight() 获取控件的高度 getTotalPaddingRight() 获取删除图标左边缘到控件右边缘的距离 getPaddingRight() 获取删除图标右边缘到控件右边缘的距离 isInnerWidth: getWidth() - getTotalPaddingRight() 计算删除图标左边缘到控件左边缘的距离 getWidth() - getPaddingRight() 计算删除图标右边缘到控件左边缘的距离 isInnerHeight: distance 删除图标顶部边缘到控件顶部边缘的距离 distance + height 删除图标底部边缘到控件顶部边缘的距离 */ /** * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 * 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 * EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑 */ @Overridepublic boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { if (getCompoundDrawables()[2] != null) { int x = (int) event.getX(); if (x > (getWidth() - getTotalPaddingRight())) { this.setText(""); } } } return super.onTouchEvent(event);}/** * 当ClearEditText焦点发生变化的时候, 输入长度为零,隐藏删除图标,否则,显示删除图标 */@Overridepublic void onFocusChange(View v, boolean hasFocus) { this.hasFocus = hasFocus; if (hasFocus) { setClearIconVisible(getText().length() > 0); } else { setClearIconVisible(false); }}/** * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去 * @param visible */public void setClearIconVisible(boolean visible) { Drawable right = visible ? mClearDrawable : null; setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]);}/** * 当输入框里面内容发生变化的时候回调的方法 */ @Overridepublic void onTextChanged(CharSequence s, int start, int count, int after) { if (hasFocus) { setClearIconVisible(s.length() > 0); }}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void afterTextChanged(Editable s) {}boolean canPaste() { return false;}boolean canCut() { return false;}boolean canCopy() { return false;}boolean canSelectAllText() { return false;}boolean canSelectText() { return false;}boolean textCanBeSelected() { return false;}@Overridepublic boolean onTextContextMenuItem(int id) { return true;}}校验密码强度给edittext 设置ontextchangelistener 并通过正则校验 public static int checkPassWordState(String s) { //密码强度:1-弱;2-中;3-强 int stateLow = 1; int stateMiddle = 2; int stateHard = 3; //判断是否为纯数字 String regexNum = "[0-9]*"; Pattern pNum = Pattern.compile(regexNum); //判断是否为纯英文 String regexEnglish = "^[a-zA-Z]*"; Pattern pEnglish = Pattern.compile(regexEnglish); if (pNum.matcher(s).matches() || pEnglish.matcher(s).matches()) { return stateLow; } //判断是否为数字和英文的组合 String regexMix = "^[A-Za-z0-9]+$"; Pattern pMix = Pattern.compile(regexMix); if (pMix.matcher(s).matches()) { return stateMiddle; } return stateHard;}作者:任珉豪链接:http://www.jianshu.com/p/b57db3cd5ffb來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原创粉丝点击