Android 国际化笔记

resource

  • 是否支持rtl 从右到左布局方式
    在清单文件中配置
    android:supportsRtl="true">

  • 设置组件xml属性
    android:layoutDirection="ltr"强制设置布局方法

  • 在api17以上使用带有end或start的属性替换带有left或reght的属性 例:android:layout_marginEnd="15dp"

  • 使用不同的限定符名称,提供不同的资源文件
    配置限定符完整列表(需要科学上网)

配置 示例 说明
MCC和MNC mcc310 移动国家代码
语言和区域 en 语言通过由两个字母组成的ISO 639-1语言代码定义
布局方向 ldrtl
ldltr
ldltr是默认值,要为应用启用从右到左的布局功能,必须将 supportsRtl 设置为 "true",并将 targetSdkVersion 设置为 17 或更高版本
  • 命名规则
    • 您可以为单组资源指定多个限定符,并使用短划线分隔。例如,drawable-en-rUS-land 适用于横排美国英语设备。
    • 限定符出现的顺序必须遵循表中列出的顺序
    • 不能嵌套备用资源目录。例如,您不能拥有 res/drawable/drawable-en/
    • 值不区分大小写
    • 对于每种限定符类型,仅支持一个值

处理配置变更##

  • 当配置变更时会调用这个方法 onConfigurationChanged(Configuration newConfig)

    通过newConfig.getLayoutDirection()获取布局方向:

    public int getLayoutDirection() {
    return (screenLayout&SCREENLAYOUT_LAYOUTDIR_MASK) == SCREENLAYOUT_LAYOUTDIR_RTL
    ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
    }
  • 强制设置配置

    private void resetLocal() {
    Configuration config = getResources().getConfiguration();
    Locale locale = App.appLocale();
    Locale.setDefault(locale);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    config.setLocale(locale);
    config.setLayoutDirection(locale);
    } else {
    config.locale = locale;
    }
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());}

    getResources().updateConfiguration()方法在17版本以后过时,替换为下面的方法
    ContextWrapper public Context createConfigurationContext (Configuration overrideConfiguration

关于时区##

  • 获取当地时间 Locale.CHINA表示使用地区文字样式,setTimeZone获取哪个时区的时间
    public static String timeFormat(long time, String locale) {
    DateFormat dateFormat1 = new SimpleDateFormat("HH:mm dd-MM-yyyy", Locale.CHINA);
    dateFormat1.setTimeZone(TimeZone.getTimeZone("GMT+3"));
    //dateFormat.setTimeZone(TimeZone.getTimeZone(locale));
    return dateFormat1.format(time);
    }

关于字符串的格式化##

  • 字符串的格式化

    可以使用有两个参数的format方法
    public static String format(Locale l, String format, Object... args) {
    return new Formatter(l).format(format, args).toString();
    }
  • TextView中设置显示的语言 防止例如在阿拉伯语环境下,数字会以阿拉伯语的方式展示
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    textView.setTextLocale(Locale.ENGLISH);
    }

你可能感兴趣的:(Android 国际化笔记)