RN Android перезапускает деятельность при изменении локалиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 RN Android перезапускает деятельность при изменении локали

Сообщение Anonymous »

Я хочу настроить изменение языкового стандарта на основе настроек.
После того, как пользователь выбрал язык, вызывается AppCompatDelegate API, чтобы сообщить Android об изменении языка. Языковые настройки для каждого приложения
Но приложение перезапускается. Как избежать перезапуска приложения при смене локали?
В манифесте уже добавлена ​​локаль для android:configChanges


Вот мой модуль:
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import android.os.Build
import com.facebook.react.bridge.*

class LocaleModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {

override fun getName(): String {
return "LocaleModule"
}

@ReactMethod
fun setApplicationLocales(localesArray: ReadableArray, promise: Promise) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
try {
val locales = Array(localesArray.size()) { "" }
for (i in 0 until localesArray.size()) {
locales = localesArray.getString(i) ?: ""
}
val localeList = LocaleListCompat.forLanguageTags(locales.joinToString(","))
AppCompatDelegate.setApplicationLocales(localeList)
promise.resolve(null)
} catch (e: Exception) {
promise.reject("ERROR", e.message ?: "Unknown error")
}
} else {
promise.reject("UNSUPPORTED", "API level is below 33")
}
}

@ReactMethod
fun getApplicationLocales(promise: Promise) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
try {
val localeList = AppCompatDelegate.getApplicationLocales()
val localesArray = WritableNativeArray()
for (i in 0 until localeList.size()) {
localesArray.pushString(localeList?.toLanguageTag())
}
promise.resolve(localesArray)
} catch (e: Exception) {
promise.reject("ERROR", e.message ?: "Unknown error")
}
} else {
promise.reject("UNSUPPORTED", "API level is below 33")
}
}
}

Пакет:
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.uimanager.ViewManager
import com.facebook.react.bridge.ReactApplicationContext

class LocalePackage: ReactPackage {
override fun createViewManagers(reactContext: ReactApplicationContext): List {
return emptyList()
}

override fun createNativeModules(
reactContext: ReactApplicationContext
): List {
return listOf(LocaleModule(reactContext))
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... le-changes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»