Kotlin一个简单的Android 程序

上周在https://www.kotlincn.net/docs/reference/ 学习了Kotlin,是在eclipse 安装的插件进行练习的,把里面的知识通过代码练习过后,就有用Kotlin开发android 的冲动。
这个简单的程序就实现了一个拨打电话的功能
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.song.androidart">
    <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.song.androidart.MainActivity">

    <TextView
        android:id="@+id/titleN"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

上面的代码都是没有变化的
在看看下面Kotlin写的Activity吧

class MainActivity : AppCompatActivity() {
    val callRequestCode:Int=10;
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setName("call phone")

    }
    fun setName(name:String){
        titleN.text=name;
        titleN.setOnClickListener{
            if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
                var str= arrayOf(android.Manifest.permission.CALL_PHONE);
                ActivityCompat.requestPermissions(this, str,callRequestCode);
            }
            else {
                call();
            }
        };
    }
    fun call (){
        var  mIntent=Intent();
        mIntent.setAction(Intent.ACTION_CALL);
        mIntent.setData(Uri.parse("tel:10086"));
        startActivity(mIntent);
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when(requestCode){
            callRequestCode->{
                if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    call();
                }
                else {
                    Toast.makeText(this,"权限申请失败",Toast.LENGTH_LONG).show();
                }
            }


        }
    }

}

上面我实现了两个操作,一个是给TextView 设置text,还有一个通过点击TextView 实现打电话的功能,会发现和java 的一些明显区别
1 变量和常量的声明
声明常量 val 常量名称 :常量类型 =值;例如 val callRequestCode:Int=10;
变量的声明 var 变量名称:变量类型=值 ;例如 var age:Int=10;
常量和变量声明的区别是一常量为val 变量 var
2.从上面的代码我们可以很明显的发现在Kotlin实现的Activity中没有findViewById的操作,而是直接通过view 的id进行操作,这会让我们的代码更加简洁,并且会极大的提高开发的效率。
3.对view 点击事件的处理

titleN.setOnClickListener{
            if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
                var str= arrayOf(android.Manifest.permission.CALL_PHONE);
                ActivityCompat.requestPermissions(this, str,callRequestCode);
            }
            else {
                call();
            }
        };

通过setOnClickListener{}里面直接实现代码逻辑
还有一种 实现接口
View.OnClickListener

titleN.setOnClickListener(this);

class MainActivity : AppCompatActivity(), View.OnClickListener // 这里的接口实现没有了java 的 implements 关键字

//实现接口的方法:
override fun onClick(v: View?) {
        //kotlin中的条件判断语句 只有if 和when
        when(v?.id){
            R.id.titleN->{
                if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
                var str= arrayOf(android.Manifest.permission.CALL_PHONE);
                ActivityCompat.requestPermissions(this, str,callRequestCode);
            }
            else {
                call();
            }
            }
        }
    }

从这一个简单的小项目可以看出Kotlin和Java 还是有很大的区别的,并且以后android开发的主流语言可能就是Kotlin了,更多的感悟还要深入学习在项目中实践,希望不要误导大家,有不当的地方希望大家及时指正

猜你喜欢

转载自blog.csdn.net/songmingzhan/article/details/80689787