上周在https://www.kotlincn.net/docs/reference/ 学习了Kotlin,是在eclipse 安装的插件进行练习的,把里面的知识通过代码练习过后,就有用Kotlin开发android 的冲动。
这个简单的程序就实现了一个拨打电话的功能
AndroidManifest.xml
<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>
布局文件
<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了,更多的感悟还要深入学习在项目中实践,希望不要误导大家,有不当的地方希望大家及时指正