对顶级ar语言环境使用通用布局,对其他语言环境使用特定于区域的语言环境

时间:2015-11-24 13:32:22

标签: android android-layout locale

我正在开发一个多语言应用,需要为特定区域显示不同的布局

我的结构如下

res/
    layout/
        questions.xml
    layout-ar-rLY/
        questions.xml

当语言环境为英语(en)时,将显示默认布局。当区域设置是利比亚时,显示利比亚(ar_LY)布局。但是,当语言环境是阿拉伯语(ar)时,仍会显示利比亚布局。我需要它来显示默认布局。

我知道我可以简单地创建一个layout-ar目录并在那里复制questions.xml布局,但是,我想知道是否有更优雅的方法来实现正确的结果,所以我不必维护这两个文件。

res/
    layout/
        questions.xml
    layout-ar/
        questions.xml
    layout-ar-rLY/
        questions.xml

到目前为止,我提出的最佳解决方案是默认布局和阿拉伯布局都包含共享子布局。有没有更好的方法来实现相同的结果?

1 个答案:

答案 0 :(得分:0)

感谢上述MH的评论,我在官方的方式上看了Android documentation,使用别名建议这样做。

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

不幸的是,documentation中给出的方法实际上并不起作用(详见this StackOverflow)。使用merge标记作为根元素会产生InflateException错误。

我确信StackOverflow帖子中包含的第二个建议修补程序应该可以正常工作;然而,在我看来,将Layouts放入资源的概念与创建多个副本一样有缺陷(例如,从维护角度来看,你必须记住它们在那里,而不是在你期望它们的布局文件夹中)所以最后我在以下方面做出了妥协:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
  <include layout="@layout/questions_default"/>
</FrameLayout>

这比仅仅合并标签更冗长,但至少它有效。