持续记录一些比较实用的开发技巧~
1. 扩展绘制
clipChild用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,clipChild被设置为true。 也就是不允许进行扩展绘制。
clipToPadding用来定义ViewGroup是否允许在padding中绘制。默认情况下,cliptopadding被设置为ture, 也就是把padding中的值都进行裁切了。

2. ListView的局部刷新
找到要更新的那项的View,然后再根据业务逻辑更新数据即可
// 更新数据源
item.isDefault = dialog.getChecked();
item.invoiceTitle = dialog.getTitle();
// 刷新数据
holder.bindViews(item);
3. 文字是一行就居中,多行就居左
在TextView外套一层wrap_content的ViewGroup即可简单实现
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="25dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:text="123"
android:textColor="@color/black"
android:textSize="13dp" />
</LinearLayout>
4. MonkeyTest测试用例
根据不同项目修改包名(com.ct.client)即可
测试范例:
adb -s 0A3AAA1E0901D008 shell monkey -p com.ct.client --pct-touch 30 --pct-motion 20 --pct-trackball 10 --pct-appswitch 10 -s 12867 --ignore-crashes --ignore-timeouts -v 10000 --throttle 300 > c:\monkey_test.txt
5. 获取文字宽度
public float getTextWidth(Context Context, String text, int textSize){
TextPaint paint = new TextPaint();
float scaledDensity = Context.getResource().getDisplayMetrics().scaledDensity;
paint.setTextSize(scaledDensity * textSize);
return paint.measureText(text);
}
6. ScrollView中嵌套WebView时的焦点问题
外层使用ScroolView,内层嵌套使用WebView,每次进入Activity页面时,整个页面起始位置并不是顶部,这是因为WebView加载后获得焦点导致的(ListView也会出现类似问题,即使修正了高度,也会主动获得焦点,使得屏幕产生错误的滚动)
通过设置ScrollView包含的第一个viewgroup的
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants" >
viewgroup会覆盖子类控件而直接获得焦点来轻松解决问题。
7. TextView设置部分文字颜色样式和监听
/**
* 将content 设置到 descId 中,并且content显示的颜色为 colorId
*
* @param content
* @param descId 字符串资源id
* @param colorId 颜色资源id
* @return
*/
public static SpannableStringBuilder getColorfulContent(String content, int descId, final int colorId, final Context mContext) {
String part1 = String.format(mContext.getString(descId), content);
if (TextUtils.isEmpty(content)) {
return new SpannableStringBuilder(part1);
}
int start = part1.indexOf(content);
int length = content.length() + start;
SpannableStringBuilder ssBuilder = new SpannableStringBuilder(part1);
ssBuilder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Intent i = new Intent(mContext, OnlineBusinessWebkitActivity.class);
i.putExtra("TITLE", "商城订单");
i.putExtra("URL", Constants.SHOPPING_MALL_ORDER);
mContext.startActivity(i);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(mContext.getResources().getColor(colorId)); // 设置文本颜色
ds.setUnderlineText(false);// 去掉下划线
}
}, start, length,
0);
return ssBuilder;
}
在setText之前调用
textView.setMovementMethod(LinkMovementMethod.getInstance()); // 必须加这句才能点击
textView.setHighlightColor(context.getResources().getColor(android.R.color.transparent));//点击后背景色为透明
8. scaleType设置图片不变形
// xml设置
android:scaleType="centerCrop"
// 代码中设置
mImage.setImageDrawable(bitmap);
注意此处setBackgroundDrawable将会导致scaleType设置失效,这个方法也确实过时了。
9. 临时数据使用 onSaveInstanceState 保存恢复,永久性数据使用 onPause 方法保存
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putInt("currentposition", videoView.getCurrentPosition());
Log.v("tag", "onSaveInstanceState");
super.onSaveInstanceState(outState);
}
10. 设置按钮不可点击
button.setEnabled(false);
或者
button.setClickable(false);
- 注意:
setClickable(false)方法一定要在setOnClickListener()方法之后用;
因为setOnClickListener()方法会重新绘制View;
11. 编辑框光标保持光标位于内容最后
setText之后设置:
etView.requestFocus();
否则先获得了焦点,后续再设置内容,此时焦点肯定是放在内容之前的了,则就需要额外调用setSelection去调整位置了
etView.setSelection(etView.getText().toString.length());
12. ImageView扩大点击区域
ImageView 直接设置其padding值达到目的,或者
android:scaleType="centerInside"
android:src="@drawable/ic_edit"
此时可以直接设置控件宽高来控制大小,注意不能用background,这会导致图片变形
我的博客(第一时间更新):
http://huangss.farbox.com/
网友评论