我有一个RemoteViews实例,从另一个应用程序接收为parcelable数据。我不能简单地改变服务结果(仍然必须提供向后兼容性)。
收到的RemoteViews有一个简单的布局:一个LinearLayout容器,里面有TextView和一个ImageView。图像视图带有位图图像集。
到目前为止,通过调用remoteView.apply(Context context, ViewGroup parent)
来扩展该远程视图,然后将生成的视图添加到屏幕上的另一个布局中。
此时将支持库更新到最新版本:在我的情况下从25.3.1到26.1.0,调用remoteView.apply(Context, ViewGroup)
开始抛出异常:
android.widget.RemoteViews$ActionException: view: android.support.v7.widget.AppCompatImageView can't use method with RemoteViews: setImageBitmap(class android.graphics.Bitmap)
这似乎是由AppCompatImageView的RemotableViewMethod
上缺少setImageBitmap()
注释引起的。也许它在支持26+中删除或从未存在,因为AppCompatImageView不适用于RemoteViews ...
似乎在支持库(23.1.0)的先前版本中,“setImageResource(int)”和“setBackgroundResource(int)”以相同的方式启动失败:https://issuetracker.google.com/issues/37071559
我想要了解的是:
RemoteViews.apply(Context, ViewGroup)
通知RemoteViews时,有没有办法避免让AppCompatimageViews而不是简单的ImageView膨胀?提供给apply
方法的上下文是“AppCompatActivity”。我能够找到的唯一“解决方案”(一种丑陋的解决方法)是使用反射从RemoteView检索位图数据,然后在我自己的布局中使用该图像。 (而不是对RemoteView进行充气并将所有内容添加到布局中)。
提前致谢