###目录
##android命名规范 ###1. id控件命名规范
| 控件名称 | 缩写 |
| LinearLayout | ll_ |
| RelativeLayout | rl_ |
| TextView | tv_ |
| Button | btn_ |
| ImageButton | ibtn_ |
| ImageView | iv_ |
| CheckBox | cb_ |
| RadioButton | rbtn_ |
| EditText | et_ |
| ProgressBar | proBar_ |
| SeekBar | skBar_ |
| AutoCompleteTextView | autoTxt_ |
| WebView | wbv_ |
| RantingBar | ratBar_ |
| Spinner | spn_ |
| ScollView | slV_ |
| TextSwitch | txtSwt_ |
| ListView | lv_ |
| ExpandableListView | epdLv_ |
| DatePicker | dtPk_ |
| TimePicker | tmPk_ |
###2. 资源文件命名规范
| 资源 | 命名规范 |
| colors.xml | 项目简称_color_颜色英文_色值,比如:cs_color_yellow_ff484a |
| string.xml | 项目简称_string_具体英文,比如:cs_string_cancle |
| styles.xml | 针对TextView来说可以用 tv_颜色英文_色值_size字体大小,比如:tv_grey808080_size12 |
###3. 资源布局规范
| Activity | activity_模块名称.xml,例如:activity_main.xml、activity_user.xml |
| Fragment | fragment_模块名称.xml,例如:fragment_main.xml、fragment_user.xml |
| 列表项 | item_模块名称.xml |
| 通用布局 | common_布局的名称.xml,比如User的通用item,叫做common_user_item.xml |
</thead>
<tbody>
<tr>
<td>Button的背景图命名</td>
<td>
图片:
<table>
<tr>
<td>命名规范</td>
<td>状态</td>
</tr>
<tr>
<td>图片名_normal或者直接图片名</td>
<td>(default state)</td>
</tr>
<tr>
<td>图片名_pressed</td>
<td>state_pressed</td>
</tr>
<tr>
<td>图片名_focused</td>
<td>state_focused</td>
</tr>
<tr>
<td>图片名_disabled</td>
<td>state_enabled (false)</td>
</tr>
<tr>
<td>图片名_selected</td>
<td>state_selected</td>
</tr>
<tr>
<td>图片名_hovered</td>
<td>state_hovered</td>
</tr>
<tr>
<td>图片名_checkable</td>
<td>state_checkable</td>
</tr>
<tr>
<td>图片名_activated</td>
<td>state_activated</td>
</tr>
<tr>
<td>图片名_windowfocused</td>
<td>state_windowfocused</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Button的shape命名</td>
<td>
shape前缀规范:根据里面的属性来进行命名前缀,比如: btn_redff6d6d_radius2.xml, btn_redff6d6d_radius2_1strokef8f8f8_press.xml(如果项目里面已经有了调色板,整个系统button都使用统一的边框和红色或者其他颜色,可以进行简化,例如btn_red_press)
<table>
<tr>
<td>命名规范</td>
<td>状态</td>
</tr>
<tr>
<td>shape前缀_normal或者是直接shape前缀即可例如btn_red_radius2.xml</td>
<td>(default state)</td>
</tr>
<tr>
<td>shape前缀_pressed</td>
<td>state_pressed</td>
</tr>
<tr>
<td>shape前缀_focused</td>
<td>state_focused</td>
</tr>
<tr>
<td>shape前缀_disabled</td>
<td>state_enabled (false)</td>
</tr>
<tr>
<td>shape前缀_selected</td>
<td>state_selected</td>
</tr>
<tr>
<td>shape前缀_hovered</td>
<td>state_hovered</td>
</tr>
<tr>
<td>shape前缀_checkable</td>
<td>state_checkable</td>
</tr>
<tr>
<td>shape前缀_activated</td>
<td>state_activated</td>
</tr>
<tr>
<td>shape前缀_windowfocused</td>
<td>state_windowfocused</td>
</tr>
</table>
</td>
</tr>
<tr>
<tr>
<td>Button的selector命名</td>
<td>
selector前缀规范:根据里面的属性来进行命名前缀,比如: btn_redff6d6d_radius2.xml, btn_redff6d6d_radius2_1strokef8f8f8_press.xml(如果项目里面已经有了调色板,整个系统button都使用统一的边框和红色或者其他颜色,可以进行简化,例如btn_red_press)
<table>
<tr>
<td>命名规范</td>
<td>状态</td>
</tr>
<tr>
<td>shape前缀_normal或者是直接shape前缀即可例如btn_redff6d6d_radius2.xml</td>
<td>(default state)</td>
</tr>
<tr>
<td>shape前缀_pressed</td>
<td>state_pressed</td>
</tr>
<tr>
<td>shape前缀_focused</td>
<td>state_focused</td>
</tr>
<tr>
<td>shape前缀_disabled</td>
<td>state_enabled (false)</td>
</tr>
<tr>
<td>shape前缀_selected</td>
<td>state_selected</td>
</tr>
<tr>
<td>shape前缀_hovered</td>
<td>state_hovered</td>
</tr>
<tr>
<td>shape前缀_checkable</td>
<td>state_checkable</td>
</tr>
<tr>
<td>shape前缀_activated</td>
<td>state_activated</td>
</tr>
<tr>
<td>shape前缀_windowfocused</td>
<td>state_windowfocused</td>
</tr>
</table>
</td>
</tr>
<td>Fragment</td>
<td>fragment_模块名称.xml,例如:fragment_main.xml、fragment_user.xml</td>
</tr>
<tr>
<td>列表项</td>
<td>item_模块名称.xml</td>
</tr>
<tr>
<td>通用布局</td>
<td>common_布局的名称.xml,比如User的通用item,叫做common_user_item.xml</td>
</tr>
public ImageView mIv_question;
public TextView mTv_car_num;
2. android组件类命名规范:
| 类 | 命名规范 |
| Activity | 例如:主Activity叫做MainActivity |
| Adapter | 例如:如果主Activity叫做MainActivity,那么Adapter叫做MainAdapter,取Activity的前缀 |
| Fragment | 例如:根据业务名称来命名(业务名Fragment) |
##android注意事项 ###1. Handler的使用 Handler机制有一个特点是不会随着Activity、Service的生命周期结束而结束。也就是说,如果你Post了一个Delay的Runnable,然后在Runnable执行之前退出了Activity,Runnable到时间之后还是要执行的。如果Runnable里面包含更新View的操作,程序崩溃了。
解决方案:
1.采用EventBus的开发方式,线程中的数据都可以通过消息的形式传到主Activity中。
2.采用android-weak-handler,具体使用方式可以点击连接进行查看。
3.@Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacksAndMessages(null); }
##android小技巧
###1. SharedPreferences小技巧
SharedPreferences.Editor.commit这个方法是同步的,一直到把数据同步到Flash上面之后才会返回,由IO操作的不可控,尽量使用apply方法代替。apply只在API Level>=9才会支持,需要做兼容。
###2. ADB 命令技巧1
如果你用的是mac或者是linux再或者是windows上面得git shell,那么你就可以使用如下文件adb.sh,把下面的内容放入到adb.sh中,然后通过执行./adb.sh+空格+包名的形式去过滤定位到当前应用:
#!/bin/bash
packageName=$1
pid=`adb shell ps | grep $packageName | awk '{print $2 }'`
real_pid=`echo $pid | awk '{print $1}'`
echo $real_pid+"#######"
adb logcat | grep --color=auto $real_pid
###2. ADB 命令技巧2 当你发现你的adb命令不能使用或者是打不开的时候,可以试着采用如下命令去查看下是否有进程占用了你的端口:
linux or mac:
netstat -ano | grep "5037"
window:
netstat -ano | findstr "5037"
###3.string.xml技巧 在string.xml中定义html代码,可以采用如下的方式:
<string name="effect">影响力:<![CDATA[<font color="#ff484a">%1$s</font>]]></string>
在string.xml中使用空格可以通过代码  : 
去实现。
###4.android studio使用技巧 1. 检查无用的资源,在项目中点击右键,在出现的右键菜单中有“Analyze” --> “run inspaction by Name ...”。在弹出的搜索窗口中输入想执行的检查类型,如“Unused Resources” ##android兼容性bug