2

我有一个应该为几个不同的客户部署的应用程序。对于每个客户,我想允许不同的颜色和资源。

有什么方法可以让应用程序在启动时从互联网加载资源和配置,然后在应用程序上使用它们。

我知道我可以使用Google Tag Manager从 Internet 加载配置值。是否有一些平台可以用来为 Drawable 资源做类似的事情?

4

3 回答 3

2

您需要将远程资源下载到 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");
于 2014-01-14T22:41:22.290 回答
0

您可以使用颜色过滤器,请参阅 修改 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);

}

只要确保那是您想要的过滤器

于 2014-01-14T16:50:52.427 回答
0

考虑这一点的含义:如果您在未连接互联网的设备上启动此应用程序,它仍然需要可绘制的本地缓存。如果您的客户想要紧凑的用户体验,您是否真的希望依赖远程资源来加载应用程序的 UI?

也许您最好的(尽管可扩展性较差)解决方案是创建多个 APK,为每个客户创建一个。对于“几个不同的客户”,这可能比托管 UI 组件更简单。对于大量客户,您可能会开始考虑更具创造性的解决方案。

编辑:请查看此答案,了解有关如何有效管理多个包的一些富有成效的想法。

于 2014-01-14T16:04:51.163 回答