Android学习笔记4 - 初学Activity和viewBind

这篇博客介绍了Android开发中的Activity基本概念,包括如何创建一个没有Activity的项目,手动添加EmptyActivity,设计布局,使用viewBinding简化组件获取。此外,还讲解了菜单的创建和响应,以及Activity的销毁方法。通过实例展示了在Activity中添加按钮、显示Toast以及使用Menu资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity是什么

它是用户界面的组件,用于交互。HelloWorld里自动生成了MainActivity,这里我们自己建立一个。
这次建立一个没有Activity的空项目。
我们打开AS,创建新项目,选择No Activity。
在这里插入图片描述
下一步和完成。
这次需要手动来添加一个Activity。

添加新的Activity

在这里插入图片描述
如上图,我们再java\com.example.newactivity点右键,创建一个Empty Activity。
在这里插入图片描述
我们写好名字,不要勾选Layout和Launcher选项,我们后面为了熟悉它,手动添加,点击完成。

添加新的Layout

再res目录下,因为还没有Layout,所以目录都没有,我们手动创建一个。
然后在目录上右键添加Layout Resource File。
在这里插入图片描述

在这里插入图片描述

点击OK后。
在这里插入图片描述
我们可以看到layout的设计视图,点击code可以切换到代码视图。Split是一半设计视图,一半code视图。

我们拖动一个按钮到视图上,Code里也多了响应的代码。和网页前端IDE操作类似。
在这里插入图片描述
这里的ID需要注意,我们看按钮的id=@+id/button2,这里的@是不是就是引用value,这里加了+号,所以就没有引用,如果需要引用就除掉+号。

加载调用布局

最后在Activity的OnCreate函数里加载布局。

	class FirstActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.first_layout)
    }
}

这里R表示资源文件,我们添加的所有资源都会在R文件种生成一个相应的资源ID。

注册Activity和设置主Activity

所有的Activity注册了才可以使用,我们打开AndroidManifest,能看到它自动帮我们注册了。
在这里插入图片描述
老版本的AS需要自己来添加,新的版本已经都替我们做好了。

接下来,我们要设置主Activity。

		<activity android:name=".FirstActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

这里要注意,如果你没有设置主Activity,程序是可以安装,只是无法看到或者打开,可以作为其他应用来调用。

运行

在这里插入图片描述

在Activity中使用toast

toast是安卓系统提供的提示方式,一般一些短小的信息提示通知给用户,一段时间后消失。

我们给按钮上添加点击事件,触发toast。
代码如下:

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

        val btn :Button = findViewById(R.id.button2)
        btn.setOnClickListener(){
            Toast.makeText(this,"点击了按钮!",Toast.LENGTH_SHORT).show()
        }
    }
}

运行后:
在这里插入图片描述

当我们点击按钮后,出现了toast提示。

viewBind

到这里还需要了解一种更便捷的写法,我们每次都要通过findViewById去获得组件,其实AS提供了一种更简单的办法。利用viewBind

首先我们要添加viewBinding到项目的build.gradle文件的android节点下。

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'

}

android {
    compileSdk 32

    buildFeatures {
        viewBinding true
    }

    defaultConfig {
        applicationId "com.example.newactivity"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

gradle变动后要点击同步一次,否则不会生效的。
在这里插入图片描述
完毕后,Layout就会生成一个布局java文件,我们代码中就可以比较方便的使用这些组件了。
在这里插入图片描述

然后我们回到代码,我们看看如何简便了。

package com.example.newactivity

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

import android.widget.Button
import android.widget.Toast
import com.example.newactivity.databinding.FirstLayoutBinding


class FirstActivity : AppCompatActivity() {

    protected lateinit var binding : FirstLayoutBinding //定义全局的,方便别的函数使用

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

//        val button1 :Button = findViewById(R.id.button1)
//        button1.setOnClickListener(){
//            Toast.makeText(this,"点击了按钮!",Toast.LENGTH_SHORT).show()
//        }
//        button1.text = "test"

        binding = FirstLayoutBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view.rootView)

        binding.button1.setOnClickListener(){
            Toast.makeText(this,"点击了按钮!",Toast.LENGTH_SHORT).show()
        }
        
        Log.d("t","ok")
    }
}

首先我们定义了全局的binding变量,方便其他函数调用,并且是lateinit,看名字就知道是等下初始化。
然后通过FirstLayoutBinding.inflate(layoutInflater)获得binding,并且把rootView传递给setContentView,这一步很重要。

然后这个layout下的组件都可以使用binding.来获得了。

关于viewBind可以参考官网说明

Menu

我们在res目录下创建menu文件夹,然后鼠标右键点击main文件夹创建Menu资源。
在这里插入图片描述

并添加两个按钮,如下:

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

然后回到Activity脚本,需要重写onCreateOptionsMenu()方法。
我们在脚本中按Ctrl+o,可以快捷简便的找到要覆写的方法。

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

我们运行起来后就可以看到Menu了(3个点的位置)
在这里插入图片描述

接下来要让菜单里这两个按钮生效,我们需要覆写另外一个方法

 override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId)
        {
            R.id.add_item -> Toast.makeText(this,"Click Add !",Toast.LENGTH_SHORT).show()
            R.id.remove_item -> Toast.makeText(this,"Click Remove !",Toast.LENGTH_SHORT).show()
        }
        return  true 
    }

我们再次运行,点击菜单中的Add和Remove,可以看到已经生效了。

请添加图片描述

Activity的销毁

只要调用finish()方法就可以了,和按下Back按键是一样的。可以把之间的Button改成调用finish实验一下。

			binding.button1.setOnClickListener(){
            Toast.makeText(this,"点击了按钮!",Toast.LENGTH_SHORT).show()
            finish()
        

运行后:

请添加图片描述

Activity的内容比较多,本章就到这里,后面再继续Activity。

参考
《第一行代码》Android第三版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值