Мне нужно внести некоторые изменения в строки, определенные в файле strings.xml, прежде чем отображать их в представлении. Я могу расширить класс ресурсов и переопределить функцию getString(), чтобы вернуть измененную строку.Изменение строковых значений перед отображением в android
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);
внутри макета activity_main:
<TextView
android:id="@+id/helloText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textColor="#ff0000" />
Я не хочу, чтобы явно задать текст для каждого вида (как упоминалось выше), и хотел бы добиться этого с макета XML, а также. Существует ли общий метод, чтобы в любом случае вызывались мои переопределенные ресурсы? Или любой другой способ достичь этого?
Заранее спасибо.
Я не думаю, что я был необходимым продлить класс ресурсов ... почему вы так поступили? –
Почему вы не можете просто подстроить текст динамически в своем коде? Как просто вызвать ресурс String, а затем просто добавить к нему все, что вы хотите, прежде чем отображать его. У меня возникли проблемы с пониманием того, почему это не сработает для вас. – NoChinDeluxe
@NoChinDeluxe: у меня будет модифицированный файл strings.xml (возможно, загруженный через сеть), который я буду анализировать и теперь покажут модифицированные переводы для строк, упомянутых в этом файле strings.xml. В этом файле strings.xml будет только измененное подмножество строк. Поскольку я не знаю заранее, какие строки меняются, я не могу обработать его в коде. Это будет полезно для локализованных строк, для которых у меня не было доступных переводов, когда я отправил apk. – Rahul