RTL принудительно используется в устройствах RTL

#android #react-native #right-to-left

#Android #react-native #справа налево

Вопрос:

Новая версия React Native выпустила поддержку устройств RTL: https://facebook.github.io/react-native/blog/2016/08/19/right-to-left-support-for-react-native-apps.html
Однако, похоже, что на устройствах RTL Android макет RTL принудительный, и его невозможно изменить, поэтому теперь все приложения не работают для устройств RTL. Как я могу заставить свое приложение использовать LTR?

Ответ №1:

Мне удалось исправить это, добавив в MainApplication.java :

 import com.facebook.react.modules.i18nmanager.I18nUtil;

public class MainApplication extends Application implements ReactApplication {
    @Override
    public void onCreate() {
        super.onCreate();

        // FORCE LTR
        I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance();
        sharedI18nUtilInstance.allowRTL(getApplicationContext(), false);
        ....
    }
}
  

Комментарии:

1. добавление в какой файл?

2. в основном приложении. java-файл

3. Это отлично работает! … (установка supportsRtl=»false» в манифесте ничего не сделала для меня).

4. Я написал небольшую суть, которая помогает решить эту проблему в medium.com/@nirlevy /…

5. Фантастика. Для меня это отлично сработало.

Ответ №2:

Если вы используете Expo или простой React Native, поместите эти строки в свой App.js/tsx файл:

 import { I18nManager} from 'react-native';

I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
I18nManager.swapLeftAndRightInRTL(false);

const App = () => {

   ~ ~ ~

}
  

Комментарии:

1. Добавление этих двух сработало для меня: I18nManager.forceRTL(false); и I18nManager.allowRTL(false);

Ответ №3:

В manifest.xml добавление файла android:supportsRtl="false" в тег вашего приложения

Комментарии:

1. да, этот ответ, а также приведенный выше (allowRTL-false) сотворили волшебство.

2. Вам необходимо добавить android:tools : <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.*.*" xmlns:tools="http://schemas.android.com/tools"> ... <application android:supportsRtl="false" tools:replace="android:supportsRtl"> ...

3. manifest.xml в моем проекте этого нет. где я это ищу?

Ответ №4:

просто добавив эти строки кода в точку входа вашего проекта, например App.tsx

 import { I18nManager } from "react-native";

// disable RTL
try {
  I18nManager.allowRTL(false);
  I18nManager.forceRTL(false);
  // the next line is the most effective one
  I18nManager.swapLeftAndRightInRTL(false);
} catch (e) {
  console.log(e);
}
  

Ответ №5:

ответ @ atlanteh правильный. Я просто даю вам подробный ответ для тех, у кого есть опыт работы с ios, и они мало что знают об Android.

сначала попробуйте один раз. если 1-й не работает, попробуйте 2. Если все еще не работает, попробуйте оба. затем он покажет ожидаемый результат.

Ответ 1

MainApplication.java

 public class MainApplication extends Application implements ReactApplication {
    @Override
    public void onCreate() {
        super.onCreate();

        // FORCE LTR
        I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance();
        sharedI18nUtilInstance.allowRTL(getApplicationContext(), false);
        ....
    }
}
  

Ответ 2

AndroidManifest.xml

я добавил android:supportsRtl="false" application тег in

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.appname">
    ........
    <application 
      android:supportsRtl="false"
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      android:name="com.facebook.react.devsupport.DevSettingsActivity" />
       ....
    </application>

</manifest>