我有一个应该为几个不同的客户部署的应用程序。对于每个客户,我想允许不同的颜色和资源。
有什么方法可以让应用程序在启动时从互联网加载资源和配置,然后在应用程序上使用它们。
我知道我可以使用Google Tag Manager从 Internet 加载配置值。是否有一些平台可以用来为 Drawable 资源做类似的事情?
我有一个应该为几个不同的客户部署的应用程序。对于每个客户,我想允许不同的颜色和资源。
有什么方法可以让应用程序在启动时从互联网加载资源和配置,然后在应用程序上使用它们。
我知道我可以使用Google Tag Manager从 Internet 加载配置值。是否有一些平台可以用来为 Drawable 资源做类似的事情?
您需要将远程资源下载到 SD 卡。然后,您可以使用以下方法即时创建可绘制对象:
Drawable d = Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), "yourDownloadedBackground.png").getAbsolutePath());
然后使用 setBackGroundDrawable() 或 setBackGround() 设置布局背景,后者仅适用于 API 16 或更高版本。
另一种方法是在布局中放置 webviews 而不是图像。这将允许您加载远程图像、本地文件和 HTML 片段。在您的布局中放置一个 webview 并尝试以下操作:
android.webkit.WebView v = (android.webkit.WebView) findViewById(R.id.webView1);
v.loadUrl("http://developer.android.com/assets/images/dac_logo.png");
您可以使用颜色过滤器,请参阅 修改 android drawable 的颜色 http://blog.syedgakbar.com/2012/07/sharing-color-of-the-drawable-or-imageview-at-runtime-in-android /
int color=Color.rgb(colorR, colorG, colorB);
public static BitmapDrawable changeColor(Bitmap bitmap, Context context, int color){
Bitmap bitmapCopy = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas c = new Canvas(bitmapCopy);
Paint p = new Paint();
p.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
c.drawBitmap(bitmap, 0, 0, p);
return new BitmapDrawable(context.getResources(),bitmapCopy);
}
只要确保那是您想要的过滤器
考虑这一点的含义:如果您在未连接互联网的设备上启动此应用程序,它仍然需要可绘制的本地缓存。如果您的客户想要紧凑的用户体验,您是否真的希望依赖远程资源来加载应用程序的 UI?
也许您最好的(尽管可扩展性较差)解决方案是创建多个 APK,为每个客户创建一个。对于“几个不同的客户”,这可能比托管 UI 组件更简单。对于大量客户,您可能会开始考虑更具创造性的解决方案。
编辑:请查看此答案,了解有关如何有效管理多个包的一些富有成效的想法。