IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android notes——第一行代码笔记(第三版) -> 正文阅读

[移动开发]Android notes——第一行代码笔记(第三版)

Android notes——第一行代码笔记(第三版)

第3章——先从看得到的入手,探究Activity

3.1 Activity是什么

Activity是一种可以包含用户界面的组件


3.2 Activity基本用法

3.2.1-3.2.3 创建Activity、在Activity中加载layout布局、AndroidManifest中注册Activity

  • 任何Acticity应该**重写onCreate() **方法,所有Activity中需要有一个主Activity

  • 最好每一个Activity都对应一个布局,讲究视图和逻辑分离

  • 布局文件最好使用驼峰命名法,例如:xxx_layout.xml

  • 项目中的任何资源都会在R文件中生成一个相应的资源id

  • Activity和布局联系起来的方式

    • 在Activity中加载first_layout.xml文件的布局setContentView(R.layout.first_layout)
    class FirstActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.first_layout)				//加载布局
    
            val button1: Button = findViewById(R.id.button1)	//调用findViewById()获得R文件中的button1实例
            
            button1.setOnClickListener{
                Toast.makeText(this, "You clicked Button 1", Toast.LENGTH_SHORT).show()
            }
        }
    }
    
    • 在AndroidManifest文件中注册——Android studio自动完成

    • 注册Activity后,需要设置一个主Activity,以便让程序知道启动哪个Activity。在AndroidManifest.xml中写入**标签**,添加如下内容和如下面代码所示。

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.activitytest">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"			//在xml中不推荐直接出现字符串,而是在string.xml中做一个索引,所有字符串均在其中
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/Theme.MyApplication">
            
    <!--        在这里配置你的activity-->
            <activity android:name=".FirstActivity" android:label="This is FirstActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
            
        </application>
    
    </manifest>
    

3.2.4 在Activity中使用Toast,Toast就是一个简单的提示消息~

Toast的用法:调用一个静态方法makeText(),其参数如下:

参数参数内容
第一个Context对象,如果在Activity中使用,可以直接用this关键字,因为Activity也是一个Context对象
第二个文本,在""中键入显示的文本消息
第三个文本停留时长,有Toast.LENGTH_SHORTToast.LENGTH_LONG两个参数
Toast.makeText(Context对象, "tpye your text here~", Toast.LENGTH_SHORT).show()
  • 将调用静态方法makeText()的代码放入一个 调用监听器 的方法中,相应事件触发,即有相应提示。例子如下:
button1.setOnClickListener{
    Toast.makeText(this, "You clicked Button 1", Toast.LENGTH_SHORT).show()
}

当button1被按下,则会有提示信息。

【注】控件和Activity联系的方式——在Activity中首先获取控件实例,然后为控件调用相应的监听方法

弃用的kotlin-android-extensions插件,获取布局中定义的元素、获取控件等实例——findViewById()的替代方法ViewBinding

findViewById()方法获取布局文件中定义的元素,通过传入R.xxx来得到相应控件的实例,但是在控件很多的情况下,这势必会变得枯燥且复杂。

就像这样:

val button1: Button = findViewById(R.id.button1)		//你还不能忘记给button1加类型 : Button
......
val button100000: Button = ......

先前可以使用kotlin-android-extensions插件来省略这一步P92,但是这一插件已经被弃用,具体内容见郭霖一篇关于kotlin-android-extensions插件弃用的博文,这里面详细叙述了在不同情况下使用ViewBinding来替代kotlin-android-extensions的方法。下面内容摘自郭霖的上面那篇博客


引用内容——郭霖大神的博客中内容,方便自己查阅~

ViewBinding总体来说其实非常简单,它的目的只有一个,就是为了避免编写findViewById,这和它另外一个非常复杂的兄弟DataBinding相比有明显的区别。

要想使用ViewBinding需要注意两件事。第一,确保你的Android Studio是3.6或更高的版本。第二,在你项目工程模块的build.gradle中加入以下配置:

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

这样准备工作就完成了。接下来我会从Activity、Fragment、Adapter、引入布局这4个方面,分别讨论ViewBinding的用法。


1.在Activity中使用ViewBinding

一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding

Binding类的命名规则是将布局文件驼峰方式重命名后,再加上Binding作为结尾

比如说,前面我们定义了一个activity_main.xml布局,那么与它对应的Binding类就是ActivityMainBinding

当然,如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素位置加入如下声明:

<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    ...
    tools:viewBindingIgnore="true">
    ...
</LinearLayout>

接下来我们看一下如何使用ViewBinding来实现在MainActivity中去设置TextView内容的功能,代码如下所示:【MHH注】TextView是一个控件的id

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)	//创建一个binding实例
        setContentView(binding.root)								//加载布局
        binding.textView.text = "Hello"
    }
}

【MHH注】由上述可以看到,在val binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)这两行代码后,binding可以直接获取layout中的元素id——textView

首先调用activity_main.xml布局文件对应的Binding类,也就是ActivityMainBinding的inflate()函数去加载该布局,inflate()函数接收一个layoutInflater参数,在Activity中是可以直接获取到的。

接下来就更加简单了,调用Binding类的getRoot()函数可以得到activity_main.xml中根元素的实例,调用getTextView()函数可以获得id为textView的元素实例。

把根元素的实例传入到setContentView()函数当中,Activity就可以成功显示activity_main.xml这个布局的内容了。然后获取TextView控件的实例,并给它设置要显示的文字即可。

当然,如果你需要在onCreate()函数之外的地方对控件进行操作,那么就得将binding变量声明成全局变量,写法如下:

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.textView.text = "Hello"
    }

}

注意,Kotlin声明的变量都必须在声明的同时对其进行初始化。而这里我们显然无法在声明全局binding变量的同时对它进行初始化,所以这里又使用了lateinit关键字对binding变量进行了延迟初始化。


2.在Fragment中使用ViewBinding

3.在Adapter中使用ViewBinding

4.对引入布局使用ViewBinding

3.2.5 在Activity中使用Menu——就是菜单啦!P92

res目录下new一个Directory——menu,右键menu文件夹,创建一个Menu resource file(第二行就是),命名为main

在main.xml的code中添加:

<?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="@string/add"/>
    <item android:id="@+id/remove_item"
        android:title="@string/remove"/>
</menu>

在Activity中重写onCreateOptionsMenu()方法(ctrl + o快速定位)

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main, menu)		//代码解释看P94下方内容
    return true
}

在Activity中重写onOptionsItemSelected()方法,定义菜单响应事件

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

3.2.6 销毁一个Activity

在相应控件的响应事件中加入如下代码:P96

finish()

3.3 使用Intent在Activity之间穿梭

3.3.0何为intent

intent是Android程序中各组件之间进行交互的一种重要方式

  • 可以指明当前组件想要执行的动作
  • 在不同组件之间传递数据
  • intent一般用于启动
    • Activity
    • Service
    • 发送广播等

intent分为两种,显示intent和隐式intent

Intent有多个构造函数的重载,比如Intent(Context packageContext, Class<?> cls)

参数描述
第一个要求提供一个启动Activity的上下文,上下文比较抽象(目前接触到的是使用当前的Activity,即this
第二个Class用于指定想要启动的目标Activity,kotlin中可以这样使用:xxxx::class.java相当于java中的xxxx.class,以此来传入一个class对象

启动Activity的方法startActivity()方法,传入一个intent对象,即可启动对应的目标Activity。

3.3.1使用显式Intent

使用3.3.0中使用的startActivity()方法将启动一个Activity,按理来说,这个方法应该放在一些调用监听器的方法中,以便在相应控件监听到特定动作后,触发特定事件——启动一个Activity。下面给出郭霖书中的例子:

val binding = FirstLayoutBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button1.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)		//此处使用Inten构造方法,显示使用Intent来启动一个特定Activity
    startActivity(intent)
}

按照上述例子的模式,需要启动的Activity放在了Intent(Context, class)方法的第二个参数中,意图非常明显,所以书上称其为“显式Intent”。

3.3.2使用隐式Intent

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 11:02:31  更:2021-07-14 11:04:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 23:42:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码