Android Toast叠加问题 XLIFF标签 广播注册接收 Content Provider
位置:platform/packages/apps/AlarmClock
1、同一应用中Toast调用多次,Toast消息叠加:
定义静态Toast对象,在新的Toast生成时关闭之前所有的Toast视图资源(包括正在显示的以及已加载但还在队列中没有显示的)。
public class ToastMaster {
private static Toast sToast = null;
private ToastMaster() {
}
public static void setToast(Toast toast) {
if (sToast != null)
sToast.cancel();
sToast = toast;
}
public static void cancelToast() {
if (sToast != null)
sToast.cancel();
sToast = null;
}
}
2、广播消息的接收注册
//广播消息过滤
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
//注册广播监听以及Handler处理函数
mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
3、Content Provider
它主要用于App间的数据交换。
ContentValues是Content Provider的数据载体,它是对HashMap的一层封装,仅支持Byte、Short、Integer、Long、Float、Double、Boolean、Byte数组。
ContentResolver是Content Provider的操作类,包含CURD等一系列数据操作。
如果仅仅是在当前App中操作数据实体,SQLite是其他一个选择,但是Content Provider完全没必要。
如果App有以下几种需求,才建议使用Content Provider:
需要向其他App之间传递复杂数据或者文件;
允许用户从当前App拷贝复杂数据实体到其他App;
使用搜索框架来提供一套自定义的搜索建议。
4、xliff标签
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_homeurl">
Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g>
</string>
...
</resources>
对字符串的国际化是通过不同标识文件夹下XML来实现的。但是在翻译过程中就会有些字符不需要翻译,比如代码示例中的URL,如果被翻译成中文就囧大了。这就是XLIFF标签的意义,保证字符串在被翻译为各种语言时保持原样不变。PS:需要在resources标签中添加 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 才能识别xliff标签。
关于XLIFF的更多信息