2013-08-30 257 views
2

我使用两个应用程序。一个通过AIDL接口暴露RemoteView。第二个使用ListView和自定义适配器来呈现RemoteView将样式应用于RemoteView?

带有一个布局和一个TextView的非常简单的视图,TextViewListview中是白色的。

所有应用程序使用相同的灯光风格。

是否可以将样式应用于RemoteView? 或者,如何管理RemoteView实例的样式?

感谢

回答

0

RemoteView不支持更改主题。然后唯一的办法就是保留两个布局文件具有相同的布局和不同的主题(像不同的字体颜色),并且在更新appWidget之前,可以选择任何一种布局作为RemoteView

+0

我将问题简化为一个非常小的应用程序。 'public class MainActivity extends Activity {0} {0} {0}保护无效onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RemoteViews rv = new RemoteViews(MainActivity.class.getPackage()。getName(),R.layout.provider1); ViewGroup vg =(ViewGroup)findViewById(R.id.remoteview); 查看v = rv.apply(this,vg); vg.addView(v); } }' activity_main.xml与一个RelativeLayout和provider1.xml与一个简单的文本视图。但是使用remoteview生成的textview是白色的,而不是黑色的。 –

+0

@ user1875107嗨,Android RemoteView不支持活动的普通布局支持的多主题。在你看来,唯一的办法就是保持remoteviews的两种不同的布局。 – Isaiah

0

它可能使用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); 
0

我通过为远程视窗创建一个布局文件(在我的情况,我是一个自定义通知创建模板)和两个styles.xml文件,一个在值,另一个值-V21解决了这个问题。这样,我就可以将材质样式应用于棒棒糖,并适用于以前Android版本的常规样式。

如果您试图匹配某种类型的系统样式,您可以查看the Android core system styles以了解它们如何放在一起的参考。我特别关注attrs.xml,因为您可以使用其中的一些自动主题语法,例如

<style name="mediaNotificationTitle"> 
    <item name="android:textColor">?android:attr/textColorPrimary</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
</style> 

然后里面的布置,只是指它与[email protected]/mediaNotificationTitle