我希望我的应用程序可以在不同的品牌下使用——这意味着必须可以在少数地方轻松更改背景位图,而且还可以更改文本资源。
我的计划是使用主题和样式,我知道它们可用于切换位图,但它们是否允许我也更改 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>