如何以编程方式更改 Android 谷歌地图 v2 中的语言

2024-01-05

我有一个应用程序,您可以在其中更改设置中的区域设置(目的是能够在应用程序内拥有与系统区域设置不同的区域设置),我也希望能够设置地图的语言。我只能找到“设置手机的系统语言”之类的答案,这不是我要找的。有没有办法以编程方式或从 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(使用前将#替换为@)

如何以编程方式更改 Android 谷歌地图 v2 中的语言 的相关文章

随机推荐

  • 如何解决 r 中“x”必须是数字的问题?

    我正在尝试制作直方图 但我不断遇到错误消息 这是我的代码 library readxl data lt read excel data xls hist data 这是我的样本 我想创建一个直方图 y 轴为 0 100 x 轴 安全 基本
  • PDF 文档中的快照图像

    我想从 PDF 文档中的任意页面 即不一定是第一页 制作快照图像 有这方面的免费工具吗 我正在使用德尔福 TIA Steven 您可以使用 pdftk 和 ImageMagick Ghostscript 分两步完成此操作 第 1 步 使用您
  • jQuery 数据表插件不删除表行

    我试图弄清楚为什么当我单击删除按钮时 它会更改执行 php 方面的操作 但是当它返回到客户端时 它不会从表中删除该行 我正在为我的表使用数据表 delete click function var titleID this attr rel
  • 在 C 中声明 64 位变量

    我有个问题 uint64 t var 1 this is 000000 00001 right 在我的代码中 这是有效的 var 1 lt lt 43 但它怎么知道 1 应该是 64 位的呢 我不应该写这个吗 var uint64 t 1
  • 设置 SOLR SSL 属性

    当我使用提供的 Apache SOLR 启动脚本 版本 6 6 0 时 该脚本创建并执行一个 java 命令行 该命令行具有两组 SSL 属性 其相关元素设置为相同的值 一组的名称如下javax net ssl 而另一组的名称如下solr
  • AWS-CDK 错误:此 VPC 中没有“公共”子网。使用不同的 VPC 子网选择

    我正在将 CDK 堆栈从 0 30 0 移植到 0 39 0 我的 AWS 账户有一个预定义的 VPC 我只需将其导入堆栈即可 相同的子网在 0 30 0 中工作正常 但在 0 39 0 中收到错误消息 此 VPC 中没有 公共 子网 请使
  • JOIN 后选择不同的值

    我有3张桌子 Vehicle vehicle id vehicle type 1 motorcycle 2 car 3 van Owners person id vehicle id date bought 1 1 2009 1 2 200
  • Visual Studio:类型或命名空间名称“属性”不存在

    There s 另一个线程 https stackoverflow com questions 9163316 type or namespace name properties does not exist 16270872这里关于这个
  • 集合视图单元格之间不需要的空间 组合布局

    我正在将集合视图用于场景 我创建了一个自定义的构图布局 如下所示 然而 当滚动时 有一个不需要的空间单元格的第二部分之间 它发生在不同的细胞类型中 我检查了间距或插图 但无法找出原因 构图布局部分 struct UIHelper stati
  • Angular:“找不到类型为‘object’的不同支持对象‘[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组

    我创建了一个 Angular 应用程序 它从 json 文件获取数据 但我在 html 中显示数据时遇到问题 很多变数都是荷兰语 对此我感到抱歉 我对这一切也有点陌生 这是我的服务 import Injectable from angula
  • Latex IEEE 模板:在多列乳胶内容中使用单列表[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I am trying to use this IEEE template https www sharelatex com templa
  • CSS背景图片在移动浏览器上放大

    我的网站上有一个部分使用 CSS 背景图像 该网站是here http www robertsteilberg com 您可以在 联系方式 部分中看到我在哪里有固定背景图像 这是图像的当前 CSS hs contact section co
  • 如何使用 ActionScript 获取响应标头? (闪光)

    所以 我有一个像 www example com stream 这样的 URL 我需要向此 url 发出任何请求并获取 Http Rewspons 标头 如下所示 HTTP 1 0 200 OK Content type video x f
  • 如何处理 JSF 2 中的会话过期和 ViewExpiredException?

    考虑以下场景 在会话超时 过期 后 我单击 JSF 表单的提交按钮 浏览器显示一些异常消息 ViewExpiredException 无法恢复视图上下文 我想要做的是 在会话过期后自动重定向到网站的主页 这样做的机制是什么 任何帮助将非常感
  • 无法在 iOS 上创建托管对象上下文

    我创建了一个非核心数据项目 我现在想使用核心数据 在构建阶段 我将二进制文件与 CoreData framework 链接起来 在我的应用程序委托方法中 我想手动创建一个托管对象上下文 如下所示 NSManagedObjectContext
  • 如何恢复使用策略=我们的合并?

    我正在使用一个存储库 其中几周前执行了合并 我们刚刚发现它使用了 strategy ours标志 它应该使用 strategy option ours 标志 因此不会对 HEAD 应用任何更改 但是 我们需要应用这些更改 Git 已经识别出
  • python中的正交距离回归:返回值的含义

    我正在关注正交距离回归 http docs scipy org doc scipy reference odr html id1拟合因变量和自变量均带有误差的数据的方法 我用一条简单的直线拟合数据 我的模型是y ax b 现在 我可以编写代
  • 如何为版本 2 和版本 3 设置不同的 PYTHONPATH?

    假设我将 PYTHONPATH 设置为 bashrc如下 export PYTHONPATH PYTHONPATH ver2packages 当我检查 Python 3 中的 python 路径时 python3 gt gt gt impo
  • 更改完整日历中单元格的颜色

    我需要更改 arshaw 完整日历的单元格颜色 我的要求是 公司提供的假期列表的 td 单元格应该有相同的颜色 员工休假列表的 td 单元格应该具有相同的颜色 我们如何实现这一点 我能够改变事件的颜色 但不能改变单元格的颜色 另外 如果我们
  • 如何以编程方式更改 Android 谷歌地图 v2 中的语言

    我有一个应用程序 您可以在其中更改设置中的区域设置 目的是能够在应用程序内拥有与系统区域设置不同的区域设置 我也希望能够设置地图的语言 我只能找到 设置手机的系统语言 之类的答案 这不是我要找的 有没有办法以编程方式或从 xml 设置地图的