Activity的基本使用
从0开始创建一个Activity
- 首先需要创建一个基础的FirstActivity
- 创建一个layout
类型是LinearLayout<!-- 给页面中添加一个按钮--> <!-- 在first_layout.xml中添加代码 --> <!-- 从上到下的含义依次是:--> <!-- id:这个按钮的唯一标识符,我们在代码里就是用这个找到按钮--> <!-- layout_width:指定按钮的宽度,match_parent(和父亲一样宽)--> <!-- layout_height:指定按钮的高度,wrap_content(刚好能包含按钮中的内容)--> <!-- text:按钮中的文本--> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 1"/>
- 然后想要调用first_layout.xml
//就需要去到Activity中的onCreate取引入这个布局 setContentView(R.layout.first_layout)//在界面中引入这种布局 // 在这里我们是直接引入的一个布局,但是我们一般会传入布局文件的id // 流程是: // 在项目中添加的资源都会在R文件中生成一个相应的id // 比如这里调用R.layout.first_layout就得到了first_layout.xml的id,然后就把id传到了setContentView()中
- 想要Activity能够在app中生效还需要配置
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bo.a3_learnactivity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" /> <!-- Activity的注册要放在<application/>中 --> <!-- 当我们创建FirstActivity的时候必须要在AndroidManifest.xml声明 --> <application android:allowBackup="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:debuggable="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:testOnly="true" android:theme="@style/Theme.3_LearnActivity" > <!-- android:name指定具体注册哪个Activity --> <!-- 但是此处的.FirstActivity是何含义? --> <!-- 其实是com.bo.a3_learnactivity.FirstActivity,只不过是最外层的<manifest>标签通过package指定了程序的包名是com.bo.a3_learnactivity --> <!-- 所以就只用写.FirstActivity --> <!-- android:label指定的是程序标题栏的内容 --> <activity android:name=".FirstActivity" android:exported="true" android:label="This a FirstActivity" > <!-- android:exported是否支持其它应用调用当前组件--> <!-- 但是到这里还不能运Activity因为还没有指定哪个Activity先启动 --> <!-- 得添加两句代码 --> <intent-filter> <!-- 把FirstActivity标记成主程序,首先打开的就是他 --> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Toast使用
Toast是Android中提供的一种提醒方式,程序中可以使用他将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,和js中的alert()效果一样
//需要定义一个弹出Toast的触发点,可以把按钮当作触发点
var button1: Button = findViewById(R.id.button1)//R.id.button1获取到button1的id
button1.setOnClickListener{
Toast.makeText(this,"你点击了按钮",Toast.LENGTH_SHORT).show()
}
1. findViewById()方法获取到对应id的泛型对象(继承自View),所以kotlin是无法推断出他返回的到底是什么,所以需要显式定义
2. setOnClickListener()函数为按钮注册了一个监听器,监听到点击按钮,会执行监听器中的OnClick方法
3. makeText(context,text,时长)是一个静态方法,创建一个Toast,但是这需要三个参数
context: Toast需要的上下文,Activity本身是一个Context对象,所以此处传入this
text:文本内容
时长:Toast.LENGTH_SHORT(短时间),Toast.LENGTH_LONG(长时间)
// 关于findViewById()函数
// findViewById()作用是获取布局文件中控件的实例,本次中只有1个,那如果有10个呢,那就需要10个findViewById()
// 所以有了ButterKnife之类的第三方库
// 但是我们引入过插件kotlin-android-extensions,这个插件会根据布局文件自动生成一个具有相同名称的变量,我们就可以直接在Activity中使用这个变量
// 所以以上代码可简化
button1.setOnClickListener{
Toast.makeText(this,"你点击了按钮",Toast.LENGTH_SHORT).show()
}
activity中使用menu
- res下面需要一个menu文件夹,下面新建一个menu文件(Menu resource file)
menu中 <!-- 用item标签创建具体的菜单项--> <!-- android:id:给这个菜单项一个唯一的id--> <!-- android:title:给菜单项指定一个名称--> <item android:id="@+id/add_item" android:title="Add"/> <item android:id="@+id/remove_item" android:title="Remove"/>
-
//想要创建Menu就要重写onCreateOptionsMenu函数 override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main,menu) /*menuInflater在这儿里其实是调用了父类的getMenuInflater()方法, getMenuInflater()会得到一个menuInflater对象,在调用它的inflate(),就创建了一个菜单 inflate()有两个参数: R.menu.main:指明要传入的资源文件,根据这个文件来创建菜单 main:指明我们的菜单项将添加到哪个Menu对象中,这里直接使用onCreateOptionsMenu()传来的Menu return:false(不能显示),true:(可以显示)*/ return true }
-
override fun onOptionsItemSelected(item: MenuItem): Boolean { when(item.itemId){ //item.itemId获取Menu中Item的id, R.id.add_item->Toast.makeText(this,"add",Toast.LENGTH_SHORT).show() R.id.remove_item->Toast.makeText(this,"remove",Toast.LENGTH_SHORT).show() } //Menu和里面的菜单项都不需要用代码显式的去监听,Menu中的菜单项已经自动被监听了 return true }