Брендинг приложения

Я хотел бы, чтобы мое приложение было доступно под разными брендами — это означает, что должна быть возможность легко изменять фоновые растровые изображения в нескольких местах, а также изменять текстовые ресурсы.

Мой план состоит в том, чтобы использовать темы и стили, я знаю, что их можно использовать для переключения растровых изображений, но позволят ли они мне также изменять тексты, например, в TextViews?

Можно ли также указать в стиле или теме текстовый идентификатор, а затем динамически прочитать его в коде?

[РЕДАКТИРОВАТЬ]

После некоторого исследования, конечно, тексты могут быть заменены стилями. Еще одна проблема, связанная с брендингом приложения, — это необходимость изменить имя пакета, иначе Google Play не примет наше фирменное приложение.

[РЕДАКТИРОВАТЬ]

После дополнительных исследований ниже я привожу небольшой пример того, как добавить две переключаемые темы, которые позволят заменить рисование в макете активности и текстовый ресурс в текстовом представлении. Осталось вызвать setTheme(R.style.Theme1); или setTheme(R.style.Theme2); в onCreate перед setContentView.

<-- attrs.xml />
<resources>
    <attr name="ProductName" format="reference"/>    
    <attr name="ProductBackground" format="integer"/>
</resources>

<-- styles.xml />
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme1" parent="android:Theme.Light">
        <item name="ProductName">@string/s_product_1_name</item>
        <item name="ProductBackground">@drawable/back_1_vga</item>
    </style>    
    <style name="Theme2" parent="android:Theme.Light" >         
        <item name="ProductName">@string/s_product_2_name</item>
        <item name="ProductBackground">@drawable/back_2_vga</item>
    </style>
</resources>

<-- my activity layout />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="?ProductBackground"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        tools:context=".MainActivity"
        android:background="#ff0000"
        android:text="?ProductName" 
        />
</RelativeLayout>

person marcinj    schedule 27.09.2012    source источник
comment
У меня глупый ответ, наверное. Я бы поместил свою строку в... strings.xml, назвал ее торговой маркой и свое изображение в... папки (папки) с именем logo.png. Затем изменил строку и изображение для каждого клиента, который хочет брендированный версия моего приложения.   -  person Phantômaxx    schedule 04.04.2014
comment
@Vyger проблема также в том, чтобы изменить имя пакета и все это автоматизировать. Я добавил ответ, основываясь на том, что я узнал со временем, задав этот вопрос.   -  person marcinj    schedule 05.04.2014


Ответы (1)


Есть два подхода к созданию разных брендов вашего приложения:

1) Разделите ваше приложение на несколько библиотечных проектов, общий код находится, скажем, в проекте библиотеки common_lib, а все ваши бренды находятся в отдельных проектах с использованием common_lib, но с изменением некоторых ресурсов, таких как строки, некоторые чертежи, а также имя пакета. Это подход, который мы выбрали в нашем приложении.

2) Используйте варианты продуктов Gradle: http://developer.android.com/sdk/installing/studio-build.html, я думаю, что теперь это должно быть предпочтительным решением.

person marcinj    schedule 05.04.2014