3

我希望我的应用程序可以在不同的品牌下使用——这意味着必须可以在少数地方轻松更改背景位图,而且还可以更改文本资源。

我的计划是使用主题和样式,我知道它们可用于切换位图,但它们是否允许我也更改 TextViews 中的文本?

是否也可以在样式或主题中指定文本标识符,然后在代码中动态读取它?

[编辑]

经过一番调查,当然可以用样式代替文本。应用程序品牌化带来的另一个问题是需要更改包名称 - 否则 Google Play 不会接受我们的品牌应用程序。

[编辑]

经过更多调查,下面我将包含有关如何添加两个可切换主题的小示例,这些主题将允许替换活动布局中的可绘制对象和文本视图中的文本资源。剩下的就是调用 setTheme(R.style.Theme1); 或 setTheme(R.style.Theme2); 在 setContentView 之前的 onCreate。

<-- 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>
4

1 回答 1

0

有两种方法可以为您的应用制作不同的品牌:

1)将您的应用程序拆分为多个库项目,通用代码在可以说 common_lib 库项目中,并且您的所有品牌都在使用 common_lib 的单独项目中,但更改了一些资源,如字符串、一些可绘制对象,还有包名。这是我们在应用程序中选择的方法。

2)使用 gradle 产品风格: http: //developer.android.com/sdk/installing/studio-build.html,我认为这应该是现在首选的解决方案。

于 2014-04-05T08:57:28.247 回答