设计:
使用自定义view显示动态变化的内容。比如RSS,Mail,Message等自动接收到的信息。
当有内容发生变化的时候,Widget先将Model内容改变,然后呼叫自定义view的invalidate()
触发onDraw去刷新页面内容。
问题:
普通情况下可以正确处理自动刷新,当将手机转屏后会对内容的变化无响应,但是如果手动点击
屏幕去触发其刷新是有效果的。
原因:
widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了。
解决:
在自定义view中增加一个属性,记录当前显示view的引用,这样当有内容变化的时候去刷新此
引用,可实现实时刷新内容。
用RemoteView中的setInt(int viewId, String methodName, int value) 來搭配View中的setBackgroundResource (int resid) 應該可行..用法如下:
xxx.setInt(R.id.widget, "setBackgroundResource ",R.drawable.carrystick_bg1)
正确。哈哈,最后是看了music的widget的源码,发现原来它用了2个刷新,如果id存在就用updateAppWidget(int[] appWidgetIds, RemoteViews views) 刷新,如果ID不存在就用的updateAppWidget(ComponentName provider, RemoteViews views) ,跟着它的写法。在onUpdate函数中检测int[] appWidgetids,如果为NULL,就用第2个函数刷新就OK了。。。.这个函数Set the RemoteViews to use for all AppWidget instances for the supplied AppWidget provider。问题暂时得到解决。。
比如有一个天气预报的竖屏下296dp*92dp的AppWidget,需要横屏显示怎么弄,需要再做一个横屏下的AppWidget吗?
请有经验的解答一下。
还有一个就是SDK2.1下的APIDEMO中的AppWidget例子无法实现定时更新(根据XML里面的android:updatePeriodMillis),但是SDK1.5下面的就可以自动更新?这是为什么呢,和SDK有关系吗?
谢谢解答
2.1 创建镜像文件 创建方式有两种
1 使用 android 命令 android create avd -n -t -c [K|M]
-c 选项表示创建 AVD 的时候,同时创建一个镜像文件
使用 mksdcard 命令 mksdcard ,
如 mksdcard 1024M E:¥sdcard1.iso 创建一个 1G 的 SD 卡镜像文件
2.2 装载 SD 卡
emulator -sdcard <filepath>,如:
emulator -sdcard E:¥sdcard.iso
2.3 复制文件
复制文件的命令为
adb push <local> <remote>
复制一个文件/目录到模拟器上
adb pull <remote> <local>
从模拟器上复制一个文件/目录到指定目录
2.4 删除文件
rm -r <filename/folder>
private final BroadcastReceiver is_keyong= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.MEDIA_MOUNTED")) { //SD 卡已经成功挂载
//有 SD 卡
……
} else if (intent.getAction().equals("android.intent.action.MEDIA_REMOVED")
||
intent.getAction().equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")
||
intent.getAction().equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")) {//各种未挂载状态
//无 SD 卡
……
}
}
};