android - 主题相关的 Android 字符串

标签 android string resources themes customization

假设我有一个包含 2 个主题的应用程序:男性主题和女性主题。主题只是更改了调色板和一些可绘制对象,以迎合用户的喜好。

非常感谢http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html感谢他对这项工作的提示。

但现在假设我想通过该应用程序变得更可爱,不仅要更改颜色和可绘制对象,而且我还想更改字符串。例如,我可能想添加一个海盗主题,然后“提交”将是“Arrrrgh!”

因此,我的基本问题是:如何通过用户可选择的主题更改整个应用程序中的字符串?

编辑:

弥补这一点:该应用程序有 12 个按钮和 32 个 TextView ,我希望具有主题相关性,并且我希望在没有巨大映射或大量自定义属性的情况下完成此操作。

所有 3 个当前解决方案都可以使用。寻找更清洁的东西,虽然我不知道这样的野兽存在。

最佳答案

是的,可以做到,方法如下:首先您必须定义一个主题属性,如下所示:

<attr name="myStringAttr" format="string|reference" />

然后,在你的主题中,添加这一行

<item name="myStringAttr">Yarrrrr!</item>

<item name="myStringAttr">@string/yarrrrr</item>

然后您可以像这样在 XML 文件中使用此属性(注意 ? 而不是 @)。

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="?attr/myStringAttr" />

或者,从代码中,像这样:

public CharSequence resolveMyStringAttr(Context context) 
{
    Theme theme = context.getTheme();
    TypedValue value = new TypedValue();

    if (!theme.resolveAttribute(R.attr.myStringAttr, value, true)) {
        return null;
    }

    return value.string;
}

关于android - 主题相关的 Android 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343268/

相关文章:

java - 我做错了什么让我的应用程序在启动时运行?

android - 如何使用按钮在 Android 中缩放 ImageView ?

string - 计算给定字符串 Haskell 中 Char 的实例数

Python拆分字符串以找到最大的奇数整数

java - Java中如何查找未关闭的I/O资源?

android - 如何从Android 4.0以上的Android设备(如Whatsapp)获取音频文件?

Android:如何与本地服务通信和交换对象?

python - 尝试打印人类可读的 ascii 字符串

android - 是否可以从 android 库中访问原始资源?

Java - getResource 在 csv 文件上失败