Kotlin笔记26--新建Activity

36 篇文章 2 订阅
这篇博客详细介绍了如何在Android Studio中创建一个新的Activity,包括布局文件的创建、点击事件的处理、页面间的intent跳转以及使用Menu资源文件。通过实例展示了Kotlin语言在Android开发中的简洁特性,如findViewById的替代方式和使用Lambda表达式处理点击事件。
摘要由CSDN通过智能技术生成

用 AS 新建工程,默认生成一个 MainActivity 。

在原来的工程上新建一个 Activity ,创建并加载布局,再学下点击事件、弹出Toast 、页面跳转、创建 menu 菜单。

1.创建 FirstActivity

在原来的工程上,选中包名,右键 New – Kotlin Class/File ,类型选择 Class ,
创建 FirstActivity ,如下,

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class FirstActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

2.创建并加载布局

在 res/layout 目录下新建一个 activity_first.xml 布局文件,内容很简单,就一个 button ,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_first"
        android:text="first"
        android:textColor="@color/colorPrimary"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

修改 FirstActivity ,添加 setContentView() 方法,

class FirstActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)
    }
}

3.注册

在 AndroidManifest.xml 中注册,添加一个自定义的 action ,方便隐式启动

<activity android:name=".FirstActivity">
        <intent-filter>
            <action android:name="android.intent.action.START_FIRST"/>
        </intent-filter>
</activity>

4.添加点击事件

java 的写法是先 findViewById() 再 setOnClickListener() ,

Kotlin 中的写法就简洁了,

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_first.* //注释1

class FirstActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)

        btn_first.setOnClickListener {
            Toast.makeText(this, "click", Toast.LENGTH_SHORT).show()
        }
    }
}

Kotlin 中,在 app/build.gradle 中,默认引入 kotlin-android-extensions 插件,

apply plugin: 'kotlin-android-extensions'

这个插件会根据布局文件中定义的控件 id 自动生成同名的变量,可以在 Activity 中直接使用,配合 AS 的代码补全,很方便。

注意 注释1 处,要 import 当前 Activity 用的布局文件。

点击事件用 Lambda 表达式。

Toast 写法和 Java 写法一致。

这样,一个新的 Activity 就写好了。

5.intent跳转

进入应用后默认打开的是 MainActivity ,
因为 MainActivity 配置了<action android:name="android.intent.action.MAIN" />android.intent.category.LAUNCHER

<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.START_KHW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

MainActivity 的布局文件是 activity_main.xml ,给 TextView 加个 id ,

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">

    <TextView
        android:id="@+id/textview_main"
        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" />

</androidx.constraintlayout.widget.ConstraintLayout>

在 MainActivity 中添加 TextView 的点击事件,作用就是用 Intent 打开 FirstActivity ,点击这个TextView ,就可以打开 FirstActivity 了。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textview_main.setOnClickListener {
            val intent = Intent(this, FirstActivity::class.java)//注释2
            startActivity(intent)
        }
    }
}

如 注释2 处, FirstActivity::class.java 的写法相当于 Java 中的 FirstActivity.class 。

Intent 的写法和 Java 还是很类似的。

这是显示启动,也可以隐式启动,

val intent = Intent("android.intent.action.START_FIRST")
startActivity(intent)

还记得吗? android.intent.action.START_FIRST 是我们给 FirstActivity 添加的 action 。

6.使用Menu

在 res 文件夹下新建 menu 目录,再在 menu 新建 Menu resource file ,新建了 main_menu.xml 文件,

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item_1"
        android:title="item_1_title"/>

    <item android:id="@+id/item_2"
        android:title="item_2_title"/>
</menu>

回到 MainActivity 中,重写 onCreateOptionsMenuonOptionsItemSelected 方法,

	override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        //return super.onCreateOptionsMenu(menu)
        menuInflater.inflate(R.menu.main_menu, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        //return super.onOptionsItemSelected(item)
        when(item.itemId){
            R.id.item_1 -> Toast.makeText(this, "click item 1", Toast.LENGTH_SHORT).show()
            R.id.item_2 -> Toast.makeText(this, "click item 2", Toast.LENGTH_SHORT).show()
        }
        return true
    }

完成。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值