公司开发的云游戏本来是基于浏览器,后来需求变动,打算先出来一个客户端,选择了android,刚好我以前又用过android,所以打算让我先写个Demo用来录入外设输入信息。
说明:个人用android开发已经是15年的时候了,那个时候最新的好像才4.4,5.0都在测试。浏览了下相关Android开发最近的更新,android studio 已经到3.4.1,android版本已经到9.0+,官方推荐的语言也已经从java到kotlin了。感慨技术发展的快的同时开始了边开发边学习,踩过了不少坑,但是上手也比较快。

先给一个正面向结论:

软件工程师注定要一直学习,不要感慨学校学习的技术太老,出去就过时,只有在学校打好基础,出了学校才能快速上手,不管语言如何变化,版本如何更新,基础基本都是互通的




下面是干货,特此记录如下。

1控件不再需要绑定id,直接通过id调用,修改属性也不再需要get,set,通过对象名.调用就行,效果和private+get,set是一样的,如下:

TEXT_ID.text="hello"

其中TEXT_ID是文本控件的id,text是文本显示的内容属性,hello是要显示的内容,一行干掉n行代码。

2对于单行监听器代码,方法括号内属性不再需要new,也不需要通过注解调用,直接通过lambda表达式就可以调用,如果表达式左边的参数没有用到甚至能不写,如下:

button.setOnGenericMotionListener {
    view, motionEvent -> false
}

这里写法比java起省略太多了,具体调用的方法是什么,可以进入android studio查看代码提示。

3对于多行监听器代码,基本写法如下,这里我也踩了不少坑,java版和kotlin版代码同时贴出:

java

Button btn;
        btn =  findViewById(R.id.button);
        btn.setOnGenericMotionListener(new View.OnGenericMotionListener() {
            @Override
            public boolean onGenericMotion(View view, MotionEvent motionEvent) {
                int what=motionEvent.getButtonState();
                if(what==MotionEvent.BUTTON_PRIMARY)
                    Toast.makeText(MainActivity.this,"鼠标被点击",Toast.LENGTH_SHORT).show();
                return false;
            }
        });

kotlin

button.setOnGenericMotionListener(
    object :View.OnGenericMotionListener{
        override fun onGenericMotion(p0: View?, p1: MotionEvent?): Boolean {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            val what = p1?.buttonState
            if (what==MotionEvent.BUTTON_PRIMARY)
                toast("鼠标被点击")
            else
                toast(what.toString())
        }
    }
)

注意比较不同,kotlin基本都是这种格式。

4Toast终极简化

新建文件,注意不是类是文件。然后写入如下代码:

fun Context.toast(message:String,length:Int=Toast.LENGTH_SHORT){
    Toast.makeText(this,message,length).show()
}

然后通过如下代码就可以调用Toast了

toast("鼠标被点击")

就一行,是不是终极简单。