活动的基本用法
包含用户界面的组件,主要是用来和用户交互,一个应用程序中可以包含多个活动
-
手动创建一个活动
路径:app/src/main/java/com.xxx.yy
-
例子
package com.example.activitytest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
- 在项目中,任何活动都应该重写Activity中的onCreate()方法
-
创建和加载布局
路径:app/src/main/res/layout
要创建的是layout resource file
-
例子
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/button1" /> </LinearLayout>
- 使用的LinearLayout布局
- android:id:表示个当前的元素定义一个唯一的标识符
- android:layout_width:指定当前元素的宽度,match_parent表示让当前元素和父元素一样宽
- android:layout_height:指定当前元素的高度,wrap_content表示让当前元素的高度刚好包含里面的内容
- android:text:指定元素中先是到文字内容
-
在活动加载布局
-
在刚才创建的FirstActivity中
package com.example.activitytest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 使用setContentView()方法来给当前的活动加载一个布局,传入的是布局文件的id setContentView(R.layout.first_layout); } }
-
-
注册活动
路径:app/src/main/AndroidManifest.xml
所有的活动都注册在这个文件中,不注册就不能用
-
示例
<?xml version="1.0" encoding="utf-8"?> <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/Theme.Activitytest"> <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> </application> </manifest>
- 所有的活动都放在application标签中
- 通过activity标签来注册活动(如果你使用的是Android Studio,那么它会自动完成注册)
- 在activity标签中
- android:name:指定具体注册哪一个 活动,因为最外层的package属性已经指定了包名,所以这里可以直接用.
- android:exported:用来表示当前的活动是否可以被另一个活动的组件启动,true表示可以,如果设置了intent-filter标签,那么必须设置为true
- 在activity标签内部加入intent-filter标签,然后在这里声明主活动(代码如上所示)
-
Toast
Android系统提供的提醒方式,展示一段时间之后会自动消失,不占用屏幕空间
-
示例:使用Toast
// 代码位置:上面定义的FirstActivity public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 使用setContentView()方法来给当前的活动加载一个布局,传入的是布局文件的id setContentView(R.layout.first_layout); Button button1 = findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(FirstActivity.this,"你点我干啥?",Toast.LENGTH_SHORT).show(); } }); } }
- 通过findViewById()这个方法获取布局文件中定义的元素,这里是上面定义的那个按钮
- setOnClickListener()方法可以给按钮注册一个监听器,这样当点击按钮的时候就会执行监听器中的onClick()方法
- Toast调用makeText()方法,这个方法传递三个参数
- 参数1:Toast要求的上下文,因为活动本身就是一个Context对象,所以直接传入FirstAc.this
- 参数2:要显示的文本内容
- 参数3:显示的时长,有Toast.LENGTH_SHORT和Toast.LENGTH_LONG两种
-
Menu
如果有大量的菜单需要显示,可以使用Menu
路径:app/src/main/res/menu
新建一个Menu resource file文件
-
示例
<?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="添加" /> <item android:id="@+id/remove_item" android:title="移除" /> </menu>
- item标签用来创建具体的某一个菜单选项
- android:id:给菜单项指定唯一标识符
- android:title:菜单项的内容
-
示例:使用menu
public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main,menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.add_item: Toast.makeText(this,"点击添加",Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this,"点击移除",Toast.LENGTH_SHORT).show(); break; default: } return true; }
- 这两个方法和onCreate()方法同一级
- onCreateOptionsMenu()方法
- 能够得到MenuInflater对象
- 调用inflate()方法可以给当前的活动创建菜单
- inflate()方法接受两个参数
- 参数1:指定我们通过哪一个资源文件来创建菜单
- 参数2:指定我们的菜单项将添加到哪一个Menu对象中
- 这个方法返回true,表示将创建的菜单显示出来
- onOptionsItemSelected()方法
- 通过调用item.getItemId()方法来判断我们点击了哪一个菜单项,然后在相应的菜单项中加入逻辑,比如这里就使用Toast弹出信息
-
销毁活动
可以直接按下Back键销毁当前的活动
-
在程序中通过代码销毁活动
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 使用setContentView()方法来给当前的活动加载一个布局,传入的是布局文件的id setContentView(R.layout.first_layout); Button button1 = findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); }
- 使用finish()来销毁活动