在将它显示到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实现此目的。
是否存在通用方法,以便以任何一种方式调用我的重写资源?或者,任何其他方式来实现这一点?
提前致谢。
答案 0 :(得分:1)
最好在资源中使用格式化字符串
<string name="test_string">hello world%s</string>
然后用
调用它getString(R.string.test_string, " **");
美观,简单,内置