【Kotlin】第二节:Activity的基本使用


本教程使用的环境:Android studio

本教程使用的编程语言:kotlin

本教程的学习难度:前期教程适合新手入门学习,后续会逐步提升难度。


在上一课程中,我们学习了新建工程,其中就有Activity的创建,首先抛开更为基础的文件工程介绍和基本控件的介绍,在未来的课程我会逐步把用到的知识加入到课程中来,所以本节我们继续学习Activity。大概包含三部分:

1、了解Activity的基本用法

2、Android studio控件的使用

3、menu菜单的使用

一、Activity的生命周期

Activity共计7个回调函数,在它的生命周期中每一个环节执行着各自的职责。分别为:

onCreate()
onStart()
onResume()
onPause()
onRestart()
onStop()
onDestroy()

用流程图来展示一下生命期的执行过程:

 在此,我们需要了解返回栈这个概念。Android是使用任务( Task )来管理活动的,一个任务就是一组存放在栈里的活动的集台,这个栈也被称作返回栈( Back Stack )。栈是一种后进先出的数据结构。当Activity处于onResume状态的时候。它是位于返回栈的栈顶,已经可以与用户交互。

二、Activity的跳转

2.1 创建新的Activity,

命名为FirstActivity「因为第一个为MainActivity,命名是任意的,大家随意」,此时需要注意,不要勾选Launcher Activity选项,需要勾选Generate Layout FIle选项。

2.2 添加基础控件

我们在activity_main.xml中利用所见即所得「Design模式」拖动1个TextView和2个Button控件到界面上,然后切换到xml的「code模式」修改代码。

<?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"
        android:layout_width="266dp"
        android:layout_height="188dp"
        android:text="Hello World!"
        android:gravity="center"
        tools:layout_editor_absoluteX="78dp"
        tools:layout_editor_absoluteY="54dp" />

    <Button
        android:id="@+id/btn_tiaozhuan1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转1"
        tools:layout_editor_absoluteX="78dp"
        tools:layout_editor_absoluteY="341dp" />

    <Button
        android:id="@+id/btn_tiaozhuan2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转2"
        tools:layout_editor_absoluteX="247dp"
        tools:layout_editor_absoluteY="341dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

同样:在activity_first.xml中添加一个Button,并且修改代码

<?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=".FirstActivity">

    <Button
        android:id="@+id/btn_fanhui"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"
        tools:layout_editor_absoluteX="155dp"
        tools:layout_editor_absoluteY="216dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

此时我们运行下app会发现如下问题,控件都堆积在左上角。无法展示如上图的效果。因为我们使用的是约束布局,所以需要设置控件之间的约束关系「更多布局方式未来详细介绍」。

此处,我们简单设计下,让控件能够正常显示即可,不要把时间浪费在设计外观上。

2.3 增加控件之间的约束方式

下图蓝色部分,当我们选中TV控件的时候,四边出现了小圆圈,拉动小圆圈,让它依次连接到整个视图的边,然后再把tv控件拖动到合适的位置,然后相同的办法把bt控件处理好即可。

或者点击属性:

依次点击4个+位置也能够达到相同效果:

2.4 实现Button控件的点击事件

在设计控件的时候,我们给每个控件都增加了一个属性:android:id="@+id/***,它是我们能够找到它的一个标识,通过findViewById()方法找到它。下面通过代码直接展示:

FirstActivity.kt

package com.example.myapplication

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

class FirstActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)
        
        val btn_fanhui: Button = findViewById(R.id.btn_fanhui)
        // 点击事件中调用finish结束activity
        btn_fanhui.setOnClickListener {
            finish()
        }
    }
}

MainActivity.kt

package com.example.myapplication

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button

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

        // 进行实例化的2种方式,
        //val btn_tiaozhuan1:Button = findViewById(R.id.btn_tiaozhuan1)
        val btn_tiaozhuan1 = findViewById<Button>(R.id.btn_tiaozhuan1)

        // 点击事件的第1种使用方式,直接写在setOnClickListener
        btn_tiaozhuan1.setOnClickListener {
            // Activity的跳转。借助Intent
            startActivity(Intent(this,FirstActivity::class.java))
        }

        // 点击事件的第2种使用方式,需要继承View.OnClickListener,然后复写onClick函数
        findViewById<Button>(R.id.btn_tiaozhuan2).setOnClickListener(this)

    }

    // 复写onClick函数
    override fun onClick(v: View?) {
        // Activity的跳转。借助Intent
        startActivity(Intent(this,FirstActivity::class.java))
    }
}

运行起来看最终效果:

三、Menu菜单的使用

屏幕毕竟有限,当按钮和页面跳转的需求较多时,就会导致界面显得很凌乱,此时我们就需要一个集合来实现。Android的菜单有三种,选项菜单(Option Menu)是其中之一。

3.1 创建资源文件夹

目录res--layout--menu

3.2 创建menu文件

设计main.xml包含3个按键

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

    <item
        android:id="@+id/item1"
        android:title="保存">
    </item>

    <item
        android:id="@+id/item2"
        android:title="删除">
    </item>

    <item
        android:id="@+id/item3"
        android:title="取消">
    </item>

</menu>
3.3 复写相应的方法

在MainActivity.kt里面复写onCreateOptionsMenu()方法,

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

如果我们需要捕捉menu菜单里面的事件,还需要复写onOptionsItemSelected()方法

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.item1 -> Toast.makeText(this,"点击了保存按钮", Toast.LENGTH_SHORT).show()
            R.id.item2 -> Toast.makeText(this,"点击了删除按钮", Toast.LENGTH_SHORT).show()
            R.id.item3 -> Toast.makeText(this,"点击了取消按钮", Toast.LENGTH_SHORT).show()
        }
        return true
    }
3.4 展示效果图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值