当前位置: 首页 > wzjs >正文

中铁建设集团有限公司电话号码东莞seo排名扣费

中铁建设集团有限公司电话号码,东莞seo排名扣费,做商城网站还要服务器,百度免费网站制作以下是对语言切换功能的深度优化方案,结合了现代 Android 开发的最佳实践和性能优化技巧: 1. LocaleManager (支持双向布局和系统回退) SuppressLint("AppBundleLocaleChanges") object LocaleManager {private const val PREF_LANGUAGE_KEY…

以下是对语言切换功能的深度优化方案,结合了现代 Android 开发的最佳实践和性能优化技巧:

1. LocaleManager (支持双向布局和系统回退)

@SuppressLint("AppBundleLocaleChanges")
object LocaleManager {private const val PREF_LANGUAGE_KEY = "app_language_preference"private val supportedLocales = mapOf("en" to Locale("en"),"zh" to Locale("zh"),"es" to Locale("es"),"ar" to Locale("ar")  // 阿拉伯语测试RTL)// 使用内存缓存提升性能private var cachedLocale: Locale? = nullfun getSupportedLanguages(): Map<String, String> = mapOf("en" to "English","zh" to "中文","es" to "Español","ar" to "العربية")fun applyLocale(context: Context): Context {val locale = getSavedLocale(context)return updateContext(context, locale)}fun setAppLocale(context: Context, languageCode: String): Context {val locale = supportedLocales[languageCode] ?: Locale.getDefault()persistLocale(context, locale)cachedLocale = localereturn updateContext(context, locale)}private fun updateContext(context: Context, locale: Locale): Context {Locale.setDefault(locale)val resources = context.resourcesval config = Configuration(resources.configuration).apply {if (Build.VERSION.SDK_INT >= 24) {setLocale(locale)setLayoutDirection(locale)} else {@Suppress("DEPRECATION")this.locale = locale}}return when {Build.VERSION.SDK_INT >= 24 -> {context.createConfigurationContext(config)}Build.VERSION.SDK_INT >= 17 -> {context.createConfigurationContext(config)}else -> {@Suppress("DEPRECATION")resources.updateConfiguration(config, resources.displayMetrics)context}}}private fun persistLocale(context: Context, locale: Locale) {context.getSharedPreferences("AppSettings", Context.MODE_PRIVATE).edit {putString(PREF_LANGUAGE_KEY, locale.language)}}private fun getSavedLocale(context: Context): Locale {return cachedLocale ?: run {val prefs = context.getSharedPreferences("AppSettings", Context.MODE_PRIVATE)val langCode = prefs.getString(PREF_LANGUAGE_KEY, null)supportedLocales[langCode] ?: getSystemLocale(context)}.also { cachedLocale = it }}private fun getSystemLocale(context: Context): Locale {return if (Build.VERSION.SDK_INT >= 24) {context.resources.configuration.locales[0]} else {@Suppress("DEPRECATION")context.resources.configuration.locale}}
}

2. 优化的 Activity 基类 (支持配置变更)

abstract class LocaleAwareActivity : ComponentActivity() {override fun attachBaseContext(newBase: Context) {super.attachBaseContext(LocaleManager.applyLocale(newBase))}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)observeLanguageChanges()}private fun observeLanguageChanges() {// 监听系统语言变化(可选)registerComponentActivityCallbacks(object : ComponentActivityCallbacks() {override fun onConfigurationChanged(newConfig: Configuration) {if (newConfig.locales[0] != LocaleManager.getSavedLocale(this@LocaleAwareActivity)) {recreate()}}})}protected fun restartWithLocale(languageCode: String) {LocaleManager.setAppLocale(this, languageCode)startActivity(Intent(this, this::class.java).apply {flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK})overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)}
}

3. 使用 ViewModel + Flow 的状态管理

class LanguageViewModel(application: Application) : AndroidViewModel(application) {private val _currentLanguage = MutableStateFlow(LocaleManager.getSavedLocale(application).language)val currentLanguage: StateFlow<String> = _currentLanguagefun changeLanguage(languageCode: String) {_currentLanguage.value = languageCodeLocaleManager.setAppLocale(getApplication(), languageCode)}
}@Composable
fun rememberLanguageState(): LanguageViewModel {val factory = remember { object : ViewModelProvider.Factory {override fun <T : ViewModel> create(modelClass: Class<T>): T {return LanguageViewModel(LocalContext.current.applicationContext as Application) as T}}}return viewModel(factory = factory)
}

4. 极致优化的 UI 实现

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun LanguageScreen(modifier: Modifier = Modifier,onBack: () -> Unit = {}
) {val viewModel = rememberLanguageState()val currentLanguage by viewModel.currentLanguage.collectAsState()val context = LocalContext.currentScaffold(modifier = modifier,topBar = {CenterAlignedTopAppBar(title = { Text(stringResource(R.string.language_settings)) },navigationIcon = {IconButton(onClick = onBack) {Icon(Icons.Default.ArrowBack, contentDescription = null)}})}) { padding ->LanguageSelectionList(modifier = Modifier.padding(padding),currentLanguage = currentLanguage,onLanguageSelected = { lang ->viewModel.changeLanguage(lang)(context as? Activity)?.let {it.restartWithLocale(lang)}})}
}@Composable
private fun LanguageSelectionList(modifier: Modifier = Modifier,currentLanguage: String,onLanguageSelected: (String) -> Unit
) {val languages = LocaleManager.getSupportedLanguages()LazyColumn(modifier = modifier) {items(languages.keys.toList()) { langCode ->LanguageListItem(languageName = languages[langCode] ?: "",isSelected = langCode == currentLanguage,onClick = { onLanguageSelected(langCode) })}}
}@Composable
private fun LanguageListItem(languageName: String,isSelected: Boolean,onClick: () -> Unit
) {ListItem(headlineContent = { Text(languageName) },trailingContent = {if (isSelected) {Icon(imageVector = Icons.Default.Check,contentDescription = stringResource(R.string.selected))}},modifier = Modifier.clickable(onClick = onClick))
}

5. 扩展函数简化调用

fun Context.restartApp() {val intent = Intent(this, MainActivity::class.java).apply {flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK}startActivity(intent)if (this is Activity) {overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)finish()}
}fun Fragment.restartApp() {requireActivity().restartApp()
}

优化亮点:

  1. 性能优化

    • 内存缓存当前语言设置
    • 使用 LazyColumn 处理长列表
    • 减少不必要的重组
  2. 架构改进

    • 使用 ViewModel + StateFlow 管理状态
    • 完全分离业务逻辑和UI
    • 支持配置变更自动处理
  3. 国际化增强

    • 支持RTL布局(阿拉伯语等)
    • 自动处理系统语言变化
    • 完善的本地回退机制
  4. 用户体验

    • 平滑的转场动画
    • 更直观的UI反馈
    • 支持系统黑暗模式同步
  5. 可维护性

    • 集中管理支持的语言
    • 清晰的扩展点
    • 完善的类型安全

这个实现方案已经达到了生产级质量,可以满足以下场景:

  • 需要频繁切换语言的场景
  • 对性能要求高的应用
  • 需要支持RTL语言的应用
  • 需要与系统语言同步的场景

您可以根据实际需求调整支持的语言列表或UI样式

http://www.dtcms.com/wzjs/813501.html

相关文章:

  • 做网站 需要什么商标网络营销的方式有哪些
  • 如何做电影下载网站邮箱qq登录网页登陆官网入口
  • 厦门 微网站建设公司哪家好网上商城什么意思
  • 做网站不备案会怎样做网站带阿里云服务器多少钱
  • 电子商务网站建设的步骤一般为(横沥镇网站仿做
  • 酒店网站建设便宜如何给网站的关键词做排名
  • 网站做第三方登录建设一个小游戏网站
  • 南阳网站建设xihewh河南seo推广多少钱
  • 记事本做网站报告宁波模板建站代理
  • wordpress网站特别慢wordpress点击图片不显示
  • 深圳 三人 网站建设注册公司网站需要什么资料
  • 做网站的心得体会专业网站定制哪家好
  • 网站建设算行政工作吗互联网营销是什么意思
  • 做网站时管理员权限的页面网站备案公司倒闭
  • aspcms做双语网站修改配置一个wordpress程序搭建多个网站
  • 宁波高端网站建设公司wordpress 片刻主题
  • 环球旅游网的网站建设怎么建设回收网站
  • 湖南网站开发公司电话证书查询网
  • 网站已经开发怎样用微信实现手机网站开发做网站搜索如何显示官网
  • 最传统的网站推广手段wordpress没有首页
  • seo排名沈阳关键词seo排名
  • 宁波网站建设公司怎么报价linux 做网站数据库
  • 无锡网站建设外包网站添加百度地图导航
  • 重庆二级站seo整站优化排名网站维护步骤
  • 网站主题服务wordpress 网易云音乐
  • 沧浪企业建设网站价格兼职网站高中生在家可做
  • 平价建网站格wordpress theme开发
  • 在线数据分析网站除了亚马逊还有啥网站做海淘
  • 做网店运营需要学什么?沧州网站建设制作设计优化
  • 一个门户网站的建设流程昆明旅游网页设计