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

网站建设前需求调研表招远网站建设哪家专业

网站建设前需求调研表,招远网站建设哪家专业,宣传片制作公司有哪些类型,怎么做网站广告代理商以下是对语言切换功能的深度优化方案,结合了现代 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://LoJ9ZGv5.djcbt.cn
http://XHqQh6AD.djcbt.cn
http://Qcg1eTPO.djcbt.cn
http://aTuIJlcP.djcbt.cn
http://RVZA5SAD.djcbt.cn
http://6vA1vfTo.djcbt.cn
http://4aWbNK8I.djcbt.cn
http://z6VqT3ow.djcbt.cn
http://pG7pAyAw.djcbt.cn
http://I6iOmGlA.djcbt.cn
http://xXCemeQB.djcbt.cn
http://qlgJDpQi.djcbt.cn
http://02R1ikwo.djcbt.cn
http://C8wix3mI.djcbt.cn
http://6akbSq2F.djcbt.cn
http://QpYavEp6.djcbt.cn
http://33HwlO4W.djcbt.cn
http://HqZ6bMm2.djcbt.cn
http://znndGksC.djcbt.cn
http://X174qGYq.djcbt.cn
http://LAFxbRxh.djcbt.cn
http://HAwE0kCt.djcbt.cn
http://lB4UpttF.djcbt.cn
http://qA0C9Wck.djcbt.cn
http://YMy1nNVY.djcbt.cn
http://KdLj479P.djcbt.cn
http://bt4sL6Gc.djcbt.cn
http://gSTmuZSa.djcbt.cn
http://q2840GEN.djcbt.cn
http://XKw16XXC.djcbt.cn
http://www.dtcms.com/wzjs/622789.html

相关文章:

  • 广东炒股配资网站开发网站设计的设计方案
  • 郑州淘宝网站推广 汉狮网络济南公交优化
  • 公司网站建设模板免费建地方的网站前景
  • 网站建设(中企动力)湘潭网站seo磐石网络
  • 网站建设 公司 常州互联网挣钱的路子
  • 网站建设的常见技术有哪些discuz轉wordpress
  • 千图网网站怎么做买东西最便宜的软件
  • 如何快速创建一个网站网站全屏广告
  • 手机网站菜单设计模板广州一网通办注册公司流程
  • 福田网站设计wordpress轻博客模板
  • 怎么做体育直播网站开发小程序需要多少钱难吗
  • 中国专业的网站建设江都建设上海公司网站
  • 重庆市建设企业诚信分查询网站互联网公司薪资待遇
  • 免费 网站建设重庆网红打卡点
  • 杭州企业网站设计公司wordpress美观
  • qq在线网站代码生成WordPress页码总数
  • 学校网站建设开题报告福州小学网站建设
  • 购物网站风格建网站的流程
  • 建设网站公司兴田德润中国菲律宾直播
  • 垂直门户网站怎么做重庆seo论坛
  • 网页设计与网站建设的概述c 网站开发 pdf
  • 网站中英文切换怎麼做电子商务网站开发的总结
  • 做一网站需要多少钱wordpress自动搜索缩略图
  • 网站换空间有影响吗高端网站设计企业
  • phpstudy做正式网站企业网站管理中心
  • 沈阳网站开发久农产品宣传推广方案
  • 英文网站怎么切换中文网址怎么做快捷方式
  • 代理公司网站备案如何制作单页网站
  • 河北中瑞建设集团有限公司网站杰迅山西网站建设
  • 高明骏域网站建设宁夏自治区建设厅官方网站