我有一个应用程序,您可以在其中更改设置中的区域设置(目的是能够在应用程序内拥有与系统区域设置不同的区域设置),我也希望能够设置地图的语言。我只能找到“设置手机的系统语言”之类的答案,这不是我要找的。有没有办法以编程方式或从 xml 设置地图的语言?
public class LocalizedActivity extends FragmentActivity {
private GoogleMap map;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// you need to call this ASAP:
setLocaleResources("iw");
// after this most parts of the UI are localized, but not the map
setContentView(R.layout.main);
android.support.v4.app.FragmentManager sfm = getSupportFragmentManager();
final Fragment f = sfm.findFragmentById(R.id.map);
final SupportMapFragment mf = (SupportMapFragment) f;
map = mf.getMap();
}
static void setLocaleResources(final String languageCode) {
final Context context = RedAlert.getContext();
Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(languageCode);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
conf.setLayoutDirection(conf.locale);
}
res.updateConfiguration(conf, dm);
}
主要.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
public class MapActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings.setLocaleResources(getContext());
}
}
public class Settings {
final static String PREF_LOCALE = "locale";
final Static String DEFAULT_LOCALE_STRING = "en_US";
void setLocaleResources(final Context context) {
String localeString = PreferenceManager
.getDefaultSharedPreferences(context)
.getString(PREF_LOCALE, DEFAULT_LOCALE_STRING);
Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
Locale locale = getLocale(localeString);
Locale.setDefault(locale); // this is needed to change even the map's language
Configuration conf = res.getConfiguration();
conf.locale = locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
conf.setLayoutDirection(conf.locale);
}
res.updateConfiguration(conf, dm);
return res;
}
private static Locale getLocale(final String language2_COUNTRY2) {
Locale locale;
if (null == language2_COUNTRY2 || language2_COUNTRY2.isEmpty() || DEFAULT_LOCALE_STRING.equals(language2_COUNTRY2)) {
locale = MyApp.getSystemLocale();
} else {
final String language = language2_COUNTRY2.substring(0, 2).toLowerCase(Locale.ENGLISH);
final String country = language2_COUNTRY2.substring(3, 5).toUpperCase(Locale.ENGLISH);
if (null == country || country.length() != 2) {
locale = locales.get(language);
if (null == locale) {
locale = new Locale(language);
locales.put(language, locale);
}
} else {
locale = locales.get(language + '_' + country);
if (null == locale) {
locale = new Locale(language, country);
locales.put(language + '_' + country, locale);
}
}
}
return locale;
}
}
public class MyApp extends Application {
@Override
public void onCreate() {
defaultSystemLocale = Locale.getDefault();
Settings.setLocaleResources(getContext());
}
public static Locale getSystemLocale() {
return defaultSystemLocale;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)