android多语言适配(Window窗口的布局动态改变)

正常切换语言时,android系统会自动重新创建Activity重新加载资源,这是语言时可以自动改变。但当在Service中或其他地方通过WindowManager添加一个Window时,切换语言是不会自动改变,因为WindowManager已加载Window不会再重新加载,这时就需要监听语言的变化动态设置布局控件的文本以及布局方向。

监听语言的改变可通过四大组件的onConfigurationChanged方法回调监听到语言的改变,或者监听Intent.ACTION_LOCALE_CHANGED广播。广播监听的方式如下,记得进行广播的反注册。

   private BroadcastReceiver mLocaleBroadcastReceiver;
    private void registerLocaleReceiver() {
        if (mLocaleBroadcastReceiver == null) {
            mLocaleBroadcastReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    mTvWindowTitle.setText(mContext.getString(R.string.window_title));
                }
            };
            IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
            mContext.registerReceiver(mLocaleBroadcastReceiver, filter);
        }
    }

当切换为阿拉伯语言时(阿拉伯从右往左的浏览方向),发现Window布局方向也没有改变,此时需要动态设置布局方向。

mLayoutWindow.setLayoutDirection(isRtl() ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);

其中isRtl()方法为判断当前语言的文本方向。

       private boolean isRtl () {
            return TextUtilsCompat.getLayoutDirectionFromLocale(getResources().getConfiguration().locale) == ViewCompat.LAYOUT_DIRECTION_RTL;
        }

当然文本也有方向,阿拉伯语言时也有其他语言(英语)显示的情况,而TextView设置了match_parent或设置了指定宽度,此时英文会默认显示从左往右,而需求效果是同阿拉伯文从右往左显示,这时需要动态设置文本方向。

mTvWindowTitle.setTextDirection(isRtl() ? View.TEXT_DIRECTION_RTL : View.TEXT_DIRECTION_LTR);

同时阿拉伯语言需要注意图片的翻转,当用到了不对称的图片时,阿拉伯语言也需要进行翻转,android系统并不会自动翻转图片,此时需要准备翻转后的图片,放在drawable-ar-hdpi(不同密度对应不同目录)的资源目录下。

这里教给大家一个小技巧进行图片翻转而不需要依赖UI工程师切图。首先以Windows系统自动的画图3D软件打开图片,点击右上角查看更多选项,点击画布选择,在画布面板中最下方有旋转和翻转选项,点击第三个水平翻转,之后点击菜单另存为图像保存,这样就生成翻转的图片了。

当遇到俄语等这种超长语言时,会出现文本显示不全的情况,此时需要进行超长文本适配。有两种方案:

第一种,建立不同语言的资源文件

可以适当减小语言文本较长的控件的文本大小,新建values-ru资源目录,调整文本大小到合适的显示效果(window窗口需要动态设置文本大小)。同时尽量使用wrap_content属性来达到文本适应,也可以新建layout-ru来创建语言的布局。

第二种,跑马灯效果

跑马灯的实现参考这篇博客

https://blog.csdn.net/CJohn1994/article/details/124046084

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言并肃

感谢大哥支持!您的鼓励是我动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值