在android中显示之前修改字符串值

时间:2016-02-16 20:28:50

标签: java android override android-resources android-context



在将它显示到View之前,我需要对strings.xml中定义的字符串进行一些修改。 我能够扩展Resources类并覆盖getString()函数以返回修改后的字符串。

public class MyResource extends Resources {
    public MyResource(AssetManager assets, DisplayMetrics metrics,
        Configuration config) {
        super(assets, metrics, config);
    }

    @Override
    public String getString(int id) throws NotFoundException {
        if(super.getResourceEntryName(id).equals("hello_world"))
            return super.getString(id) + " **";  //modifying string for hello_world
        return super.getString(id);
    }
}

并在申请中使用它:

MyResource myres = new MyResource(super.getAssets(), super.getResources().getDisplayMetrics(), super.getResources().getConfiguration());
String modStr = myres.getString(R.string.hello_world); // returns the modified string
textview.setText(modStr);

这很好用,但是当我在布局文件中定义文本并使该布局膨胀时,这段代码没有任何效果,字符串也按原样显示。

setContentView(R.layout.activity_main);

inside activity_main layout:

<TextView
    android:id="@+id/helloText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    android:textColor="#ff0000" />

我不想为每个视图显式设置文本(如上所述),并希望使用layout xml实现此目的。 是否存在通用方法,以便以任何一种方式调用我的重写资源?或者,任何其他方式来实现这一点?

提前致谢。

1 个答案:

答案 0 :(得分:1)

最好在资源中使用格式化字符串

<string name="test_string">hello world%s</string>

然后用

调用它
getString(R.string.test_string, " **");

美观,简单,内置