drm*_*wer 10 android android-appwidget
我的小部件的布局文件从顶层开始,具有:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/widget_margin"
android:id="@+id/widget"
android:background="#20000000" >
Run Code Online (Sandbox Code Playgroud)
因此,起始背景是半透明的.然后在执行期间的某个时刻,我调用以下内容使背景完全透明:
remoteViews.setInt(R.id.widget, "setBackgroundColor", Color.parseColor("#00000000"));
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的,但我发现,当添加另一个小部件时,该小部件的背景将根据布局xml以完全透明而非半透明的方式开始.就好像为一个小部件设置背景颜色已经改变了它,包括随后添加的新小部件.
现在这很奇怪,因为与上面的代码片段同时,我还在窗口小部件中添加了一个位图(通过RemoteViews):
remoteViews.setImageViewBitmap(R.id.imageView, bmp);
Run Code Online (Sandbox Code Playgroud)
...并且该位图不会出现在所有后续窗口小部件中,因此我使用的基本方法似乎是合理的.
那么为什么背景会传播到其他小部件呢?
编辑添加appWidgetId评论中要求的派生:
基本上来自于Intent例如小部件onCreate()的配置Activity:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
Run Code Online (Sandbox Code Playgroud)
在你的AppWidgetProvider类中你重写onUpdate方法。最后一个参数是appWidgetIds当前活动小部件 id 的数组。最有可能的是,您实现了在每个 widgetId 的数组中循环更改背景颜色。为了能够为每个小部件定义自定义背景,您需要实现将所需背景映射到特定 widgetId 的逻辑,并遵守循环内的该逻辑。
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |