三、Activity 活动
是可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个Activity
基本用法
手动创建Activity
- “Add No Activity"
- 右击com.example.activitytest包→New→Activity→Empty Activity
创建和加载布局
- res→New→Directory->layout。layout→New→Layout resource file
- override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.first_layout)
//加载布局 - 项目中的任何Activity都应该重写onCreate()方法 ctrl+o
在AndroidManifest文件中注册
-
所有的Activity都要在AndroidManifest.xml中进行注册才能生效
-
Activity的注册声明要放在标签内,通过标签
来对Activity进行注册 -
使用android:label指定Activity中标题栏的内容
-
<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" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".FirstActivity" //activity名称 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>在Activity中使用Menu
在Activity中使用Toast
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, “You clicked Button 1”, Toast.LENGTH_SHORT).show()
}
}
通过findViewById()方法获取在布局文件中定义的元素,findViewById()方法返回的是一个继承自View的泛型对象
setOnClickListener()方法为按钮注册一个监听器
Toast.makeText(this, “You clicked Button 1”, Toast.LENGTH_SHORT).show()
//makeText创建Toast对象,传入三个参数,Context:activity就是一个context对象,所以这里是this,显示内容,显示时长:Toast.LENGTH_SHORT和Toast.LENGTH_LONG。show()显示
app/build.gradle里kotlin-android-extensions可以直接bt1.setonclicklistener
在Activity中使用Menu
res->New->Directory->menu
menu下建资源文件 new->Menu resource file
写法:
<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>
kt中使用:
重写onCreateOptionsMenu()方法
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main, menu)
return true
}
menuInflater.inflate(R.menu.main, menu)
//相当于调用父类的getMenuInflater()得到MenuInflater对象,再调用inflate方法创建菜单。
Inflate两个参数,第一个参数指定通过哪个资源创建菜单,第二个指定菜单添加到哪个menu对象中,这里使用传入的menu
return true
//允许菜单显示,false不显示
重写onOptionsItemSelected()方法
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.add_item -> Toast.makeText(thi
R.id.remove_item -> Toast.makeText(this
return true
}
getset
val book = Book()
book.pages = 500
val bookPages = book.pages
这里看上去好像我们并没有调用Book类的setPage
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTyTGjut-1690217621197)(C:\Users\kuxulei\AppData\Roaming\Typora\typora-user-images\image-20230522151941922.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hFBoZi2k-1690217621204)(C:\Users\kuxulei\AppData\Roaming\Typora\typora-user-images\image-20230522152000293.png)]
销毁Activity
按下back键
调用finish()方法
button1.setOnClickListener {
finish()
}