本来是安安心心周末休假的时间,却被强征来加班。魔都今天雾霾严重,窗外都看不到360无死角都能看到的东方明珠。吃完午饭后睡一觉起来,觉得该给自己做点事情了。那就把项目里面的一些可圈可点的技术都罗列出来,顺便温习一下当初做的时候踩到的一些坑。
好了吐槽完毕,接下来就是代码和技术点了。
① 输入框里面限制输入的仅为数字以及限制仅只可以输入一位小数的数字。
import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; /** * 输入框监听器 * @version $Id: TextWatcherUtil.java, v 1.0.0 2015-09-24 上午11:42:23 Exp $ */ public class TextWacherUtil { public static void setPoint(final EditText editText) { editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 1) { s = s.toString().subSequence(0, s.toString().indexOf(".")-1);//如果想要变成小数点后面两位就把这个1变成2 editText.setText(s); editText.setSelection(s.length()); } } if (s.toString().trim().substring(0).equals(".")) { s = "0" + s; editText.setText(s); editText.setSelection(1); } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { editText.setText(s.subSequence(0, 1)); editText.setSelection(1); return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); } }
我把这个抽出来做了一个方法,在使用的时候只要这么用就好了。
mResidenceTime = (EditText)findViewById(R.id.et_loan_apply_residence_time); TextWacherUtil.setPoint(mResidenceTime);
//此外在布局文件里面加上这两个类型限制
android:digits="1234567890." android:hint="@string/please" android:inputType="number"
② 在一个activity里面用到了好多个控件,在填完上面所有的东东后提交表单,提示你前面还有一项没有填,那么还是要自己像上面滑去找到那个控件么?不!我们有定位控件的位置,并吧自动跳转到该控件的位置。并把焦点控制在该控件上
// 定位控件 private void scrollTo(View v) { int[] viewPostion = { 0, 0 }; v.getLocationInWindow(viewPostion); mScrollView.smoothScrollBy(viewPostion[0], viewPostion[1] - 300); }
使用方法:
scrollTo(【控件名】);
【控件名】.requestFocus();
③ 对象排序:在项目中具体用到的是在下载图像后将图像按照上传的顺序进行排序显示
/** * 对象排序 */ @SuppressWarnings("unchecked") public List<ArchUri> sortListStudent(List list) { Collections.sort(list, new Comparator<ArchUri>() { /* * int compare(Student o1, Student o2) 返回一个基本类型的整型, 返回负数表示:o1 小于o2, * 返回0 表示:o1和o2相等, 返回正数表示:o1大于o2。 */ public int compare(ArchUri o1, ArchUri o2) { // 按照类型进行升序排列 if (Integer.parseInt(o1.getType()) > Integer.parseInt(o2 .getType())) { return 1; } if (Integer.parseInt(o1.getType()) == Integer.parseInt(o2 .getType())) { if (o1.getSeq() > o2.getSeq()) { return 1; } return -1; } return -1; } }); return list; }
④ 短信验证倒计时
class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { btnUserInfor.setClickable(false); btnUserInfor.setText(millisUntilFinished / 1000 + "秒后重新发送"); } // 倒计时结束后触发 @Override public void onFinish() { btnUserInfor.setText("获取验证码"); btnUserInfor.setClickable(true); }
使用方法:
TimeCount time = new TimeCount(60000, 1000); // 开始计时 time.start();
⑤ 生成二维码
import com.google.zxing.WriterException; import android.graphics.Bitmap; /** * 二维码生成类 * @version $Id: QRGen.java, v 1.0.0 2015年7月31日 下午3:10:45 Exp $ */ public class QRGen { //链接地址 public static String Uri; //二维码图片 public static Bitmap qrCodeBitmap; //根据字符串生成二维码图片并显示在界面上,第二个参数为图片的大小 public static Bitmap creatQRGen(String str, int l){ QRGen.Uri = str; if(!Uri.equals("")){ try { qrCodeBitmap = EncodingHandler.createQRCode(Uri, l); } catch (WriterException e) { e.printStackTrace(); } return qrCodeBitmap; }else { return null; } } }
使用方法:
【控件名】.setImageBitmap(QRGen.creatQRGen(mQGenUrl, 320));//320是二维码显示大小。
这只是一些用到的小方法,当然,项目里面还有其他的许多大块的功能,还是值得学习和分享的,后续会陆续发出来。今天就写这么多了。