我使用两个应用程序。一个RemoteView
通过AIDL
接口暴露一个。第二个使用ListView
自定义适配器来呈现RemoteView
.
一个非常简单的视图,一个布局和一个TextView
,TextView
在Listview
.
所有应用程序都使用相同的灯光样式。
是否可以将样式应用于 a RemoteView
?或者,如何管理 RemoteView 实例的样式?
谢谢
我使用两个应用程序。一个RemoteView
通过AIDL
接口暴露一个。第二个使用ListView
自定义适配器来呈现RemoteView
.
一个非常简单的视图,一个布局和一个TextView
,TextView
在Listview
.
所有应用程序都使用相同的灯光样式。
是否可以将样式应用于 a RemoteView
?或者,如何管理 RemoteView 实例的样式?
谢谢
我通过为 RemoteView 创建一个布局文件(在我的例子中,我正在为自定义通知创建一个模板)和两个styles.xml
文件,一个在 values 中,另一个在 values-v21 中解决了这个问题。这样,我可以为 Lollipop 及更高版本应用 Material 样式,并为之前的 Android 版本应用普通样式。
如果您尝试匹配某种系统样式,您可以查看Android 核心系统样式,以了解它们是如何组合在一起的。我会特别关注attrs.xml,因为您可以使用其中一些具有自动主题语法的内容,例如
<style name="mediaNotificationTitle">
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
</style>
然后在布局内部,只需使用style=@style/mediaNotificationTitle
.
RemoteView
不支持更改主题。然后你唯一能做的就是保留两个布局文件具有相同的布局和不同的主题(比如不同的字体颜色),在你更新 appWidget 之前,你可以选择任何一个布局作为RemoteView
可以使用 RemoteView 应用样式。
final View view=remoteViews.apply(new ContextWrapper(mContext)
{
public Context createPackageContext(String packageName, int flags) throws NameNotFoundException
{
return new ContextWrapper(getBaseContext().createPackageContext(packageName, flags))
{
// Delegate the theme to the context
@Override
public Theme getTheme()
{
return mContext.getTheme();
}
};
}
}, parent);