开发小技巧集锦

1.错误:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source) at android.support.v4.app.FragmentManagerImpl.modifiesAlpha(Unknown Source)java

解决方案: 保存状态的代码在super以前调用 blog.csdn.net/caroline_we… stackoverflow.com/questions/7…


2.快捷键:局部变量转为全局变量,ctrl+alt+Fandroid


3.button左侧添加一个图片 android:drawableLeft="@drawable/icon_buy"git


4.edittext光标看不见的问题找出来了,是因为建立项目的主题默认光标时白色,而输入框的背景色时白色,因此肉眼看不见。。。web


5.string.xml里的技巧 一、在strings.xml里面照常写bash

<string name="subtotalItems">Subtotal(%1$s&#160;items):</string>
复制代码

其中%1$s表明第一个位置,类型为string。后面的 是表示插入一个空格 二、在初始化界面数据时,获取subtotalItems这个string,而后动态加入2. tv_subTotal为界面上的一个textview控件app

TextView tv_subTotal=(TextView) findViewById(R.id.tv_subtotal);
复制代码
//获取左侧tv_subtotal,显示subTotal items的总数
复制代码
String data = getResources().getString(R.string.subtotalItems); 
		data = String.format(data, 2);
		tv_subTotal.setText(data);
复制代码
<TextView
                android:id="@+id/tv_subtotal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:text="@string/subtotalItems"
                android:textColor="#000000"
                android:textSize="14sp" />
复制代码

NumberFormat df=DecimalFormat.getInstance(Locale.US);默认us,防止切换语言显示‘.’为',’, 或者显示的数值所有为0(即便有数值)ide

df.setMaximumFractionDigits(2);//最多显示2位小数
        return ConvertUtil.toFloat(df.format(result));
复制代码

long localTime = order.getCdate() - TimeZone.getDefault().getRawOffset();//标准格林尼治时间下日期时间转换成本地时间
复制代码

6.设置appbar没有阴影 app:elevation="0px" 设置toolbar的title颜色和大小,用app:的属性布局


7.原生图片放在mipmap 里面 drawable主要放一些放一些自定义形状和按钮变色之类的xmlui

4.3 google强烈建议使用mipmap装图片。把图片放到mipmaps能够提升系统渲染图片的速度,提升图片质量,减小GPU压力。this


8.android:button="@drawableeckbox_bg"给checkbox加上这一句样式,text设置为""

写一个样式文件,分别在选择与未选中时显示不一样的图片。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 默认颜色 -->
    <item android:drawable="@drawable/icon_unchecked" android:state_checked="false"></item>
    <!-- 点击时的颜色 -->
    <item android:drawable="@drawable/icon_checked" android:state_checked="true"></item>

</selector>
复制代码

8.SpannableString的使用

SpannableString   msp = 
new SpannableString("要显示的字符串");
msp.setSpan(new StrikethroughSpan(),0,msp.length(),
 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv_old_price.setText(msp);
复制代码

此方案能够解决毛边 原方案: tv_old_price.getPaint().setFlags( Paint.STRIKE_THRU_TEXT_FLAG);//删除线 此方案产生毛边


9.tablayout的使用 下面是viewpager的选中的监听方法。
@Override public void onPageSelected(int position) {

tabLayout.getTabAt(position).select();
复制代码

//mViewPager.setCurrentItem(2);方式改变viewpager的选择页面,而不是左右滑动切换, //此时会出现tablayout的指示器颜色正确显示,可是title文本仍是默认色,没有正确同步更新。 }


9.打包时strings.xml报错 错误:Error:(16) Error: "offTip" is not translated in "de" (German), "es" (Spanish), "fr" (French), "it" (Italian), "ru" (Russian) [MissingTranslation] 解决方案:在strings.xml加入下面属性描述

<resources  xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
复制代码

  1. 界面绘制问题 一、setContentView以前设置 getWindow().setBackgroundDrawable(null);,减小一层背景绘制 二、尽可能不要设置额外的background(即福布局设置了,自布局就不要设置一样的颜色了)。 三、减小没必要要的根布局、布局层级。 这样基本能够消除界面绘制的深、浅红色,基本就只剩下少数的3次重绘的。

  1. 新版本库的问题 suport库23.2的话,下面代码不起做用 解决TabLayout标题默认大写问题
<style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab">
        <item name="textAllCaps">false</item>
 </style>
复制代码

12.设置颜色 Color.parseColor("#30FFFFFF")


  1. java正则方法获取string里的某个值 Pattern pattern = Pattern.compile("Order ID:(\d+).*"); Matcher m = pattern.matcher("Order ID:1111 Qty:4 状态为xxx, 打回订单并做废运单请点肯定"); while (m.find()) { LogUtil.e(TAG, "find method"); LogUtil.e(TAG, "m.group(1)" +m.group(1)); } //这里获取到正则里()里面的内容,也就是orderid的值1111

  1. webview界面内存泄露解决 方案:不要xml设置webview,而是以动态建立对象的方式。 而且界面销毁时调用destroy等方法

mWebView.getSettings().setBuiltInZoomControls(true);

mWebView.setVisibility(View.GONE);// 把destroy()延后

mWebView.removeAllViews();

mWebView.destroy();


  1. as的使用技巧 alt+F7能够查看代码、类文件、布局等在哪里被使用 用ctrl shift F能够查看某个string在哪里被使用,好比搜索"20"在项目里使用的地方。 edit-find-find in path打开操做界面,上面快捷键可能冲突致使没法使用。 勾选whole words only,过滤部分数据,选择directory,选择具体搜索的路径(也能够整个项目)

  1. 常见搜索框点击后,输入文字,而后点击输入法里的完成或者搜索键触发enter键, 而后监听key进行余下的操做,可是此时会触发2次。 因为Key有Down和Up事件,因此会执行两次。

解决方案:同时知足才执行代码 public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent .ACTION_DOWN) { //继续操做 } }