Android Widget其实是mini版的apk程序,只是功能上进行了封装同时也受到了更多的约束。
以下是开发过程中碰到几点问题,记录一下:
一、关于EditText以及一些无法使用的组件问题
Widget是不允许放置EditView组件的,要实现EditText的效果,只能是在点击后跳转到另外的Activity,有几种方式:
1. 直接采用Image方式,可以使用ImageView、ImageButton等
2. 设置TextView的style属性,如:style="@android:style/Widget.EditText"
具体哪些View可以使用,可以参考官方文档(
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout)
二、独立Widget 多个按钮问题
开发中碰到一个诡异的问题,场景是这样的:
创建了一个独立的widget程序,没有main Activity,widget上面有多个按钮(每个按钮唤起一个Activity),点击第一个按钮后唤起activity1再按HOME键,然后按第二个按钮唤起activity2再按HOME键,当再次点击第一个按钮时唤起的却是activity2,当再按第三个按钮时又正常唤起activity3。
多次尝试,最后的结果是:只要是首次打开的activity被HOME键onPause后就永远无法再次打开。
暂时想到的办法是在onPause方法中先调用 super.onPause(); 再调用一下 super.finish(); 把当前actiity销毁掉。
其实原因据猜测应该是,独立widget没有main Activity导致的,系统把第一个打开的activity1当成了主程序进程,所以当再次点击按钮一以后,只是简单的唤醒了上一个activity。
这个应该时android系统设计上的问题,具体原理就得了解android系统了。
三、关于透明图片事件点击区域问题
可以采用ImageButton组件,设置一下两个属性
android:src="@drawable/image1" //图片源
android:background="#00000000" // 透明背景
android:layout_width="100dp"
android:layout_height="50dp"
这样图片也不会被拉升,点击图片以外区域以及图片的透明区域也会有事件反应,只要设置一下ImageButton的长宽就可以了
四、关于的widget界面的刷新(update)
Widget是通过RemoteView 来通讯更新界面UI的,也就是说在初始化以后(OnEnbled和首次onUpdate),只要原元素(组件)没有主动变更,就会一直存在,RemoteView只是一个通讯工具,
每次在onUpdate方法中 RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
这个新建的RemoteView不是一个初始化界面UI的过程,而只是把它绑定到了对应的widget上面。
另外,记录一下:
1. 输入法事件:android:imeOptions="actionSearch" 并实现方法editText.setOnEditorActionListener
2. 传递Intent:
final PendingIntent intent1 = PendingIntent.getActivity(context, 0, new Intent(XXX), appWidgetId), 0);
rv.setOnClickPendingIntent(R.id.first_btn, intent1);
如果有多个PendingIntent,每次 new Intent(XXX), 最好设置不同的action,或者不同的Data。
3. widget主线程无法进行联网操作,可以新建一个Thread,或者在Handle中处理。
分享到:
相关推荐
Android开发工程师面试知识整理: (整理中) 安卓开发中的常用的库、view、widget以及一些知识总结 | | | | | | | | View与Widget 带小红点的提示:BadgeView (stefanjauker的,改颜色需要在BadgeView源码里面改) ...
<androidx.recyclerview.widget.RecyclerView android:id="@+id/image_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` ```kotlin val recyclerView = ...
3. **跨平台**:Flutter支持Android和iOS双平台,一次编写,到处运行,降低了开发成本。 4. **Canvas Kit**:在描述中提到的`--canvas-kit`参数,可能是指使用了Flutter的Canvas Kit,这是一个用于在Web端绘制2D图形...
2017年存储技术变革与发展的趋势.pdf
毕业论文-qing游戏风格 商业版(GBK)-整站商业源码.zip
实训商业源码-效能-毕业设计.zip
平台跳跃游戏的核心魅力在于重力与控制的精妙平衡。本文将构建角色运动的微分方程模型,解析空中机动算法,并揭示关卡设计中的隐式引力场理论,展现2D平台游戏背后的复杂物理模拟系统。
实训商业源码-签到工具-毕业设计.zip
nsync///////
实训商业源码-票务高级版4.2.9-毕业设计.zip
运算符重载函数(友元函数).cpp
ABAQUS模型定义.pdf
FreeRTOS计数信号量的使用,模拟停车场运行逻辑
毕业论文-方熊表单V1.0.0 开源版-整站商业源码.zip
毕业论文-多商户线下积分商城会员群发V2.5.11 原版-整站商业源码.zip
实训商业源码-新材料-毕业设计.zip
毕业论文-活码自动进群V1.0.0 开源版-整站商业源码.zip
毕业论文-红包拓客生意宝2.0.3 开源版-整站商业源码.zip
Baidunetdisk_AndroidPhone_1023843j (6).apk
【研华科技】以数智融合打造可持续管理的企业未来.pdf