2017-04-25 232 views
0

我的应用程序必须在将来支持RTL和LTR语言,但现在只是RTLs。当我在每个布局中使用​​和android:layoutDirection="end"时,NavigationView和Toolbar以及其他一切都很好。在使用android:supportsRTL =“true”时禁用自动更改布局方向

但唯一的问题是,当用户将系统语言更改为LTR语言时,由于布局方向改变,一切都会出错。

我需要什么:我必须设置supportsRTL:“true”。当用户在启动时选择“应用程序”语言而不是根据操作系统语言时,我需要以编程方式更改布局方向。

问题:是否有任何方法通过更改操作系统语言(而不是通过设置supportsRTL false)来防止自动更改布局方向?

见下面的图片:

supportsRTL="true", RTL vs LTR

如果我设置android:supportRTL="false",只是设计了RTL,工具栏和导航菜单方向将是我新的麻烦布局。

见下文图像:

supportsRTL="false"

+0

请帮助我停下几天。 TNX – Abolfazl

回答

2

解决。这只是一个微小的可怕错误。

但对于任何人谁有一些问题一样,我有这个打算在Android版本非常贝尔工作17以上,预17我觉得唯一的办法就是使用RTL和LTR独立的布局。

如果你在你的清单以使用​​则:
1.如果你想只支持RTL语言,根据操作系统语言从改变方向,以防止: 只是简单地添加android:layoutDirection="rtl"所有的父你的布局(你也可以使用主题styles.xmllike this)。 或进行子活性,延长从它所有的活动,然后把这个代码在它的onCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     Configuration configuration = getResources().getConfiguration(); 
      configuration.setLayoutDirection(new Locale("fa")); 
     getResources().updateConfiguration(configuration, getResources().getDisplayMetrics()); 
    } 

但在我的脑海里,最好的方向设定为rtl每个布局,因为你可以看到它是如何的去看看没有你运行的应用程序。

2.如果你想支持RTL和LTR语言,当然不会在你的布局中使用android:layoutDirection="rtl/ltr"因为它的方向不会甚至更改代码的任何方式。因为它会沿着方向rtlltr修复它。所以你应该使用第二个。让一个子活动,并延伸了这一切的活动,然后把这个代码是(这只是举例):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     Configuration configuration = getResources().getConfiguration(); 
     if (isSlectedLanguageRTL) { 
      configuration.setLayoutDirection(new Locale("fa")); 
     } else { 
      configuration.setLayoutDirection(Locale.ENGLISH); 
     } 
     getResources().updateConfiguration(configuration, getResources().getDisplayMetrics()); 
    } 

,并在年底,对不起我的英文:)

相关问题