android:id="@android:id/empty"
与ListView配合使用,当ListView中没有数据时,显示id为empty的组件。当然对RecyclerView也是适用的。
使用TextPaint而不是Paint绘制文本

设置View的显示范围
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
RecyclerView.notifyItemChanged()
view.setTranslationZ(-1); //让组件位于其他组件下边
将View裁剪为圆形等(API >= 21)
view.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(view.getPaddingLeft(), view.getPaddingTop(),
view.getWidth() - view.getPaddingRight(),
view.getHeight() - view.getPaddingBottom());
}
});
setClipToOutline(true);
String的格式化
<string name="price_symbol_formatted_with_unit" formatted="false">¥%.2f/%s</string>
android:text="@{@string/price_symbol_formatted_string(goods.price,goods.unit)}"
<string name="ratio_good_evaluation" formatted="false">
<Data>
<![CDATA[ <font color="#63C88C" style="font-size:2em"> %s%</font> 好评 ]]>
</Data>
</string>
上述代码从上到下结果示例: ¥94.24/kg 96% 好评
SpannableString
ClickableSpan:具有点击时间的文本效果 MaskFilterSpan:如模糊效果(BlurMaskFilter),浮雕效果(EmbossMaskFilter) RasterizerSpan:光栅效果 DynamicDrawableSpan:设置图片,基于文本baseline或bottom对齐 SubscriptSpan:下标 SuperscriptSpan:上标 UrlSpan:文本超链接 AlignmentSpan:对齐方式 TypefaceSpan:字体 StyleSpan:字体样式,例如对文本加粗、斜体等 AbsoluteSizeSpan:字体绝对大小 RelativeSizeSpan:字体相对大小 BackgroundColorSpan:背景色 ForegroundColorSpan:前景色 TextAppearanceSpan:文本外貌,包括字体、样式、大小、颜色等
e.g.
String base = "北京到湖南的";
String append = "[路线]";
String com = base + append;
SpannableString ss = new SpannableString(com);
ss.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "路线", Toast.LENGTH_LONG).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
}
}, base.length(), com.length(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
TextView textView = (TextView) findViewById(R.id.text);
//必须设置MovementMethod
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(ss);
处理Markdown
使用StrictMode来检测内存泄漏
//add follow codes in your Application#onCreate()
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
//android 2.3添加StrickMode之后只能监测到数据库是否关闭
builder.detectLeakedSqLiteObjects();
//在android 3.0之后,可以监测Activity泄漏,对象泄漏,对象未关闭泄漏
if (VERSION.SDK_INIT >= Build.VERSION_CODES.HONEYCOMB){
builder.detectActivityLeaks().detectLeakedClosableObjects();
}
屏幕旋转失效
与主题冲突:
android:windowIsTranslucent="true"
InputMethodManager导致内存泄露
https://gist.github.com/pyricau/4df64341cc978a7de414