Android的国际化语言适配(系统语言适配+APP内部适配)

Android的国际化语言适配(系统语言适配+APP内部适配),第1张

Android国际化语言适配分为两种

1更改手机系统语言后,APP的语言也会跟着变化

2只改变自己APP的语言,不受手机系统语言的影响,不影响其他APP的语言,可以参考微信的切换语言的效果。

只需要创建不同语言的values即可

具体 *** 作参考  简单的Android客户端国际化(语言适配)方案

*** 作的时候要注意: 当选择所要切换的语言后,则进行修改Config以及重启APP,一定要将选择的语言保存到SP中,且在activity中的oncreate中将SP中存储的语言取出来重新设置Config,否则当重启APP后,还是会跟系统语言一样。 

具体 *** 作参考  Android应用程序内部切换语言及自定义语言

activity确实已经不存在了,所以报了这个错误。它是这样执行的:1、我的应用已经启动,我按下HOME键,执行了onPause()——>onStop();2、我在设置里面切换了系统语言,无任何反应。3、再次点击我的应用,连续执行了onDestroy()——>onCreate()——>onStart()——>onResume()——>onPause()——>onStop()——>onDestroy()。所以就出现了这两种现象:1、有初始化dialog的界面时报了上面这个错误。2、没有dialog的界面时就像进不去一样,其实已经onDstroy()了。正常情况它应该是执行到onResume()的,但是可能有哪些原因会导致它继续往下执行,一直到onDestroy()呢?

到DEVDIVCOM网站查看回答详情>>

1、Android是用户量最多的移动 *** 作系统

最新中国智能手机市场报告,2015年第一季度中国智能手机出货量同比增长了17%,总计达到11亿部。庞大的手机用户量为开发提供了良好的发展前景。

2、AndroidAPP推广相对容易

相较于苹果手机用户,安卓用户的下载就相对容易非常多,用户不仅可以通过应用商店下载您的应用,同时运营商能够通过二维码推广为用户提供推广途径,吸引更多用户下载。

3、Android系统开放性高

相对苹果系统的全封闭式,安卓系统的高度开放,给了开发者相当高的开发自由度,您的应用可以更加接近您所想所要的。

4、Androidapp开发语言

安卓应用软件开发语言有C语言和其他语言,但是主流的开发语言是Java语言,使接口到功能,都有层出不穷的变化。提高了软件神华信息的交互的可能性是Java最大的特性,可以说安卓手机几乎所有的应用程序都是利用Java语言来进行编写的。使用Java语言开发的软件的程序库、数据库、运行库都是Android手机软件的一大特点。Java语言自身的优点也有很多,所以安卓应用软件的开发应用到了的核心类的知识量,这也让使用Java语言开发的安卓软件具备优势。

关于App国际化,之前有讲到国际化资源、字符换、布局相关,想要了解的猛戳 用力抱一下APP国际化 。借着本次重构多语言想跟大家聊一下多语言切换,多语言切换对于一款国际化App来讲是重中之重,并非难事,但是若要做好也是一件不容易的事情。

当我们做了系统的配置更改,比如说切换了系统导航或者说更改了深色模式,那么我们一般的处理是也是要对Application作出处理。

如果项目中有用到ApplicationContext去getString(@StringRes int id)实现加载的提示语,那么如果只是单纯的重启界面则无法让当前的提示语跟随当前切换的语言,所以我们要么重启整个应用,要么对ApplicationContext中的Local也作出相应的更新方可,这里有一点问题,虽然Android N之后updateConfiguration是过时方法,官方给出使用createConfigurationContext代替,但是更新ApplicationContext的Local发现无效使用老版本updateConfiguration正常。

如果你发现你的应用广播通知栏适配无效,那就是context中的Local在切换语言是并未及时更新Local,这里调试一下便知,如果是Applicaiton注册的广播,那么多半情况下是没有更新ApplicationContext的Local所导致的。

多语言适配基本步骤大概就是如此了,下面看一下适配的细节问题。

[上传失败(image-b42d06-1640685147639)]

还有一点Android N之后,手机系统的语言配置选项已经不是单选了,改为一个列表了,具体可以参考手机设置中的语言和输入法,所以 setLocal(@Nullable Locale loc) 方法建议不要再使用了,我相信很多人还在用,正确的用法应该是 setLocals(@Nullable LocaleList locales) ,需要传递一个集合。

当你的应用使用的是androidxappcompat:appcompat:120及以上时,BaseActivity中需要实现下面方法。

这套方案目前不在推荐,直接去替换attatchBaseContext()中的context则可,经过测试是完全正常的。

以下则是多语言 *** 作的工具类,现在提供出来,需要的朋友可以自行进行改造。

生成多种语言的stringxml,里面放置对应的语言,修改配置(Configuration),重启之后就会加载对应语言的stringxml。

1:在res目录下,生成对应的语言包,比如英语:

在res目录下生成了可看到生成了:

<string name="hello">你好</string>

英语:

<string name="hello">hello</string>

之后就可以使用getResourcegetString(Rstringhello),这个字符串会加载相对应的配置的语言。

3:修改语言配置

修改语言配置后,需要重新启动进程,并且杀死进程。

1:有些手机是可以在设置里直接切换语言的,这个也就是Configuration改变。用户重新设置系统语言导致应用的语言也会重新设置。Configuration改变,如果在Manifest中不设置android:configChanges忽略掉配置改变,Activity会重新创建,那么我们就可以在Activity的onCreate中,重新修改语言配置。

2:切换语言后,退出应用,重新进来,你会发现又是系统设置的语言。所以需要在Application开启时,需要再次切换语言配置。

安卓官方开发语言:Kotlin初探

Kotlin是一种在Java虚拟机上执行的静态型别编程语言,由JetBrains开发团队所开发。该语言有几个优势。

它大大减少需要写的样板代码的数量。避免空指针异常等整个类的错误。构建服务器端程序、Android应用程序或者在浏览器中运行的前端程序。通过100%Java互 *** 作性,利用JVM既有框架和库。

在Kotlin中变量声明有两种类型,val修饰变量是只读变量即只能赋值一次,再次赋值时就会编译错误,如果需要多次修改值就需要使用var。

Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由和AIDL连结,达到复数程序同时运行的效果。如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止(stopped),甚至被系统清除(kill)。

View等同于J2ME的Displayable,程序人员可以通过View类与“XMLlayout”档将UI放置在视窗上,Android15的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类(abstractclass),ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View与事件(event)息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View。另外还有Image等同于J2ME的BitMap。在模拟器上运行仿真是虚拟设备(AVD),我们需要配置来运行我们的Android应用程序。步骤1、开放的AVD管理步骤2、新的按钮,点击添加新设备,并配置您的设备设置。步骤3、会有一个结果窗口显示所有已配置你上一屏幕选择。步骤4、按“确定”,你将会看到你的设备列在有你可以关闭此窗口。步骤5、运行你的Android应用程序项目从Eclipse,如果只有一个AVD配置,它会自动部署的应用程序也会出现一个窗口,选择你的。仿真器将开始。在设备上运行

Android应用程序可以直接部署在Android设备上,这几个配置所需要的。步骤1、在调试模式的设置可以设置应用程序:Android的元真可调试属性。ADT8这是默认的。步骤2、您的设备上启用USB调试:Android32或以上转至设置>应用程序>开发和启用USB调试。在Android4更新,这是开发商选择设置>。注:在Android42更新,开发者选项是默认隐藏。可以,去设定>android的版本号。返回先前屏幕找到开发商选择。步骤3、安装USB驱动程序为您的设备,计算机识别你的设备。步骤4、一旦设置和您的设备通过USB连接,从Eclipse菜单栏安装您的应用程序在设备上选择运行>运行(或运行>调试)。 *** 作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(VirtualMachine)。Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。Surfaceflinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的BionicLibc。

Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemLibrary(OSCL)、Common、OpenMAX。

Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是阳春型的。2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,Skia也是GoogleChrome的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过类(Column)取得共用数据库。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为dex格式的文件。Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成kernelindependent的概念,也让Androidframework的开发能在不考虑驱动程序实现的前提下进行发展。

HALstub是一种代理人(proxy)的概念,stub是以so档的形式存在。Stub向HAL“提供” *** 作函数(operations),并由Androidruntime向HAL取得stub的operations,再callback这些 *** 作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即moleID,就可以取得 *** 作函数。Android是运行于Linuxkernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linuxdriver与Linuxkernel彻底分开。bionic/libc/kernel/并非标准的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所产生的,这样做是为了保留常数、数据结构与宏。

Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagemeat),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。

这个很简单,在res目录下,新建对应语言的values文件夹

中文 : values-zh

中文简体: values-zh-CN

英文 : values-en

英文(美式) : values-en-rUS

系统提供的values是默认语言环境,当象上面一样提供了其它语言环境时,以提供的语言环境优先。

以上就是关于Android的国际化语言适配(系统语言适配+APP内部适配)全部的内容,包括:Android的国际化语言适配(系统语言适配+APP内部适配)、Android切换系统语言会做哪些 *** 作、Android系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9619706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存