В Android-приложении мне нужно выбрать ресурсы из папки ресурсов, отличной от выбранной в данный момент (язык интерфейса - это то, что выбирает система, но пользователь может выбрать другой язык для TTS). Из-за того, как приложение структурировано, ресурсы переключения не являются опцией; Мне нужно как по умолчанию, так и альтернативный набор одновременно. Я был в состоянии использовать этот код, чтобы, например, выбрать испанские строки, когда пользовательский интерфейс был на английском языке:Как выбрать строку из папки ресурсов Android, отличной от текущей?
class SpanishStrings()
{
private Resources mResources;
public Foo(Context context)
{
final Resources oldResources = context.getResources();
Configuration oldConfiguration = oldResources.getConfiguration();
DisplayMetrics metrics = oldResources.getDisplayMetrics();
Configuration configuration = new Configuration(oldConfiguration);
configuration.locale = new Locale("es", "es");
mResources = new Resources(oldResources.getAssets(), metrics, configuration);
}
String getString(int id)
{
return mResources.getString(id);
}
}
Но это также устанавливается весь пользовательский интерфейс на Испанский! Может ли Android иметь только один активный ресурс за раз?
Это работает на Android 2.3.4, если это имеет значение.
Приведенный выше код использует исходные активы() тоже, и мой код выше уже создает новую конфигурацию. Единственное отличие - это показатели, но я попробую. –
Извините, не работает, но теперь я думаю, что знаю почему! Создание новых ресурсов обновляет активы, а AssetManager не предоставляет способ дублирования себя, что я вижу. –