java - 有什么方法可以自动设置所有布局以支持android中的RTL和LTR方向类型的语言

标签 java android xml android-edittext textview

我不得不更改整个 android 应用程序的语言。我找到了一种将 strings 设置为 values 目录和 android:supportsRtl="true" 中的 strings-languagecode 的方法> 在 list 文件中,它很适合自动更改 text fields 的值及其方向 LTRRTL 但我遇到了问题在 EditText 字段中,因为它的方向需要由每个 xml 文件的 Java 代码更改和设置。有什么方法可以在整个应用程序中以最小的努力自动设置 EditText 的方向?请注意,我的项目中的最低 api 级别 15

最佳答案

您可以尝试这些方法来更改 RTL 或 LTR 布局方向。

对于从右到左:

例如。 locale : 阿拉伯语(ar), 希伯来语(he);

private void setRtl(){
    String languageToLoad  = "ar"; // rtl language Arabic
    Locale locale = new Locale(languageToLoad);  
    Locale.setDefault(locale); 
    
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config,  
            getBaseContext().getResources().getDisplayMetrics());
            //layout direction 
    Bidi b = new Bidi(languageToLoad,Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
            b.isRightToLeft();
    //save current locale in SharedPreferences
    SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
    SharedPreferences.Editor editor = languagepref.edit();
    editor.putString("languageToLoad",languageToLoad );
    editor.commit(); 

    startActivity(...);// refresh activity.
}

从左到右:

ex locale : English(en), Tamil(ta), etc.

private void setLtr(){
   String languageToLoad  = "en"; // ltr language English
   Locale locale = new Locale(languageToLoad);  
   Locale.setDefault(locale); 

   Configuration config = new Configuration(); 
   config.locale = locale; 
   getBaseContext().getResources().updateConfiguration(config,  
        getBaseContext().getResources().getDisplayMetrics());
        //layout direction 
   Bidi b = new Bidi(languageToLoad, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
            b.isLeftToRight();
   //save current locale in SharedPreferences
   SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
   SharedPreferences.Editor editor = languagepref.edit();
   editor.putString("languageToLoad",languageToLoad );
   editor.commit(); 

   startActivity(...);// refresh activity.

调用这些方法来改变 RTL 或 LTR 布局方向。

关于java - 有什么方法可以自动设置所有布局以支持android中的RTL和LTR方向类型的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859072/

相关文章:

java - 请求 INTERNET 权限的 BindException

android - 三角形 - 它是如何工作的?

xml - 将 XML 转换为 CSV 时出现内存不足错误

java - 要不要在方法签名前加空格?

java - Spring 数据休息: Different resource returned from received

android - 通过联系人选择器向 Android 中的 ContactsContract.CommonDataKinds.Event 添加事件

c# - 解析 XML 文件中的两条连续记录

java - 如何避免 BufferOverflow 异常?

java - 将两个字符串与新行合并

c# - 由于单引号,XpathNavigator 给出 System.Xml.XPath.XPathException