安卓学习笔记之八:本地化的简单例子(kotlin版本)

本地化及多语言支持,是目前手机软件必须面对的问题,这里用一个简单的例子来说明在Android Studio下如何实现。

创建一个Empty Views Activity项目,语言选择Kotlin

实现一个简单的功能,一条欢迎,一个按钮,按下后显示一条信息。

代码如下: 

        val button: Button = findViewById(R.id.button)val textView: TextView = findViewById(R.id.textView)val textview2: TextView = findViewById(R.id.textView2)textview2.setText("Welcome!")textView.setText("")button.setOnClickListener(){textView.setText("This is a message!")}

仿真输出效果如下: 

       

这里看到所有输出都是英文,下面要实现支持汉英两种设置。

编辑资源管理下面的字符串文件

打开工程目录下的\app\src\main\res\values\strings.xml,点击Open editor。

调出一个Translations Editor窗口,点击多语言下拉菜单。

选中中文。

对各个字串进行双语录入:

之后,可以看到,在资源管理器中出现了一个新的字符串文件

 

重新检查代码,去除HardCoded 告警 

        val button: Button = findViewById(R.id.button)val textView: TextView = findViewById(R.id.textView)val textview2: TextView = findViewById(R.id.textView2)textview2.setText(R.string.title)textView.setText("")button.setOnClickListener(){textView.setText(R.string.message)}

对各个控件的文本属性用字符串变量替代。

手机设置中,改变语言选项

 在仿真设备界面上,改变系统设置中的语言选项,改为中文。

 

 

回到项目的应用,就能看到对应的中文输出了。 

这里只是在输出界面文字上本地化的例子,真实项目上的本地化处理远远要复杂的多,要考虑文字习惯,特定代码(如货币时间单位,电话号码格式)等等的相关问题,有时甚至要考虑重新设计页面布局。

优化代码,加入屏幕旋转的考虑

屏幕发生旋转,要调用应用的onDestroy(),所有的状态都要进入初始状态。

本项目中textView在按钮按下前为空,按下后为“This is a message”。

如果在按钮按下后,屏幕发生了旋转,如果不做任何处理, 这个文本框就要重新变为空。之前操作的状态就没有保存下来。

方法OnCreate()的参数savedInstanceState就是用来解决这一问题。

可以在方法onSaveInstanceState()将要保存的状态保留下来。

优化后的代码如下:

class MainActivity : AppCompatActivity() {lateinit var textView: TextViewoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)textView = findViewById(R.id.textView)if(savedInstanceState != null){val str = savedInstanceState.getString("KEY")textView.text = str}elsetextView.text = ""val button: Button = findViewById(R.id.button)val textview2: TextView = findViewById(R.id.textView2)textview2.setText(R.string.title)button.setOnClickListener(){textView.setText(R.string.message)}}override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)outState.putString("KEY",textView.text.toString())}
}

这样,在按钮按下后,旋转屏幕,依然可以看到“This is a message”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458223.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#(C Sharp)学习笔记_If条件判断语句【五】

前言: 本期学习的是编程语言中的主要语句:if-条件判断语句。在这里我们会学到:if语法,if-else,和if嵌套。话不多说,我们开始吧! 什么是条件判断语句? 条件语句是用来判断给定的条件…

探索Spring Validation:优雅实现后端数据验证的艺术

在现代Web应用开发中,数据验证是一项至关重要的任务,确保应用程序接收到的用户输入符合预期规范,不仅能够提高系统的健壮性,也能有效防止潜在的安全漏洞。Spring Framework通过其内置的Spring Validation模块,为我们提…

C++初阶之类与对象(上)详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.前言 二.类的定义和使用 2.1类的引入 2.2类的定义和访问限定…

MacOS - M1芯片 Mac 在“恢复”模式中启用系统扩展教程

部分软件需要开启系统扩展才能正常使用,但是默然M1芯片的Mac不能直接打开系统扩展,如下两图。 若要启用系统扩展,您需要在“恢复”环境中修改安全性设置。 若要执行此操作,请将系统关机,然后按住触控ID或电源按钮以开…

3D裸眼技术行业研究:2026年市场投资规模为10.78亿元

3D裸眼技术大多处于研发阶段,它的研发分两个方向,一是硬件设备的研发,二为显示内容的处理研发。第二种已经开始小范围的商业运用。大众消费者接触的不多。从技术上来看,3D裸眼可分为光屏障式(Barrier)、柱状透镜(Lenticular Lens)…

简单说网络:TCP+UDP

TCP和UPD: (1)都工作在传输层 (2)目的都是在程序之中传输数据 (3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别) 一、区别:一个基于连接一个基于非连接 将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这…

【Qt】Android上运行keeps stopping, Desktop上正常

文章目录 问题 & 背景背景问题 解决方案One More ThingTake Away 问题 & 背景 背景 在文章【Qt】最详细教程,如何从零配置Qt Android安卓环境中,我们在Qt中配置了安卓开发环境,并且能够正常运行。 但笔者在成功配置并完成上述文章…

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本 继之前的Python中使用Opencv-python库绘制直线、矩形、圆、文本和VC中使用OpenCV绘制直线、矩形、圆和文字,将之前的Python和C示例代码翻译成C#语言,很简单,还是借用OpenCvSharp4库中的Line、…

HarmonyOS SDK 助力新浪新闻打造精致易用的新闻应用

原生智能是HarmonyOS NEXT的核心亮点之一,依托HarmonyOS SDK丰富全面的开放能力,开发者只需通过几行代码,即可快速实现AI功能。新浪新闻作为鸿蒙原生应用开发的先行者之一,从有声资讯入手,基于Speech Kit朗读控件上线听…

cocos creator 3.x 预制体无法显示

双击预制体,进入详情页,没有显示资源 Bomb 是个预制体,但是当我双击进来什么都没有了,无法对预制体进行可视化编辑 目前我只试出来一个解决方法: 把预制体拖进Canvas文件中,这样就能展示到屏幕上&#xff…

在angular12中proxy.conf.json中配置详解

一、proxy.conf.json文件的目录 二、proxy.conf.json文件中的配置 "/xxx/api": {"target": "地址/api","secure": false,"logLevel": "debug","changeOrigin": true,"pathRewrite": {"…

【 buuctf-后门查杀】

采用 D 盾进行扫描查杀 有一个级别为 5 的扫描结果,记事本打开,即为 flag