安卓学习笔记之九:本地化的简单例子(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: TextView

    override 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
        }
        else
            textView.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”

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值