Способ настроить ресурсы и цвета приложения на лету
У меня есть приложение, которое должно быть развернуто для нескольких разных клиентов. Для каждого покупателя я хочу разрешить разные расцветки и ресурсы.
Существуют ли способы, позволяющие приложению загружать ресурсы и конфигурации из Интернета при запуске, а затем использовать их в приложении.
Я знаю, что могу использовать Менеджер тегов Google для загрузки значений конфигурации из Интернета. Есть ли какая-нибудь платформа, которую я могу использовать для создания чего-то похожего на ресурсы Drawable?
3 ответа
Вам нужно будет загрузить удаленные ресурсы на SD-карту. Затем вы можете создавать нарисуйте на лету с:
Drawable d = Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), "yourDownloadedBackground.png").getAbsolutePath());
а затем установите фон макета с помощью setBackGroundDrawable() или setBackGround(), последний, только если вы нацеливаетесь на API 16 или более.
Другой способ - поместить веб-просмотры вместо изображений в макет. Это позволит вам загружать удаленные изображения, локальные файлы и фрагменты HTML. Поместите веб-просмотр в свой макет и попробуйте это:
android.webkit.WebView v = (android.webkit.WebView) findViewById(R.id.webView1);
v.loadUrl("http://developer.android.com/assets/images/dac_logo.png");
Примите во внимание последствия этого: если вы запустите это приложение на устройстве, не подключенном к Интернету, оно все равно будет нуждаться в локальном кэше отрисовок. Если ваши клиенты хотят тесного взаимодействия с пользователем, действительно ли вы хотите зависеть от удаленного источника для загрузки пользовательского интерфейса вашего приложения?
Возможно, вашим лучшим (хотя и менее расширяемым) решением было бы создание нескольких APK, по одному для каждого клиента. Для "нескольких разных клиентов" это, вероятно, проще, чем размещение компонентов пользовательского интерфейса. Для большого количества клиентов вы можете начать думать о более креативных решениях.
РЕДАКТИРОВАТЬ: пожалуйста, посмотрите на этот ответ для некоторых продуктивных идей о том, как эффективно управлять несколькими пакетами.
Вы можете использовать цветовые фильтры, см. Это Изменение цвета отрисовки для Android http://blog.syedgakbar.com/2012/07/changing-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);
}
Просто убедитесь, что это фильтр, который вы хотите