一、活动的手动创建
1、在AndroidManifest文件中注册
所有的活动都需要在AndroidManifest中注册,活动注册的声明需要放在标签内。在标签中我们使用了android:name
来指定具体注册哪一个活动,那么这里填人的.FirstActivity
是什么意思呢?其实这不过就是com.example.myapplication.MainActivity
的缩写而已。
<activity
android:name=".MainActivity"
android:exported="true">
</activity>
当将
android:exported
属性设置为"true"
时,表示该组件是对其他应用或组件公开的,其他应用可以通过隐式或显式 Intent 来启动或访问该组件。当将
android:exported
属性设置为"false"
时,表示该组件是私有的,只能被定义在同一个应用程序中的组件或服务所访问。其他应用不能直接启动或访问该组件。
不过,仅仅是这样注册了活动,我们的程序仍然是不能运行的,因为还没有为程序配置主活动,也就是说,当程序运行起来的时候,不知道要首先启动哪个活动。配置主活动的方法其实在第1章中已经介绍过了,就是在标签的内部加入标签。
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
//表示该组件是应用程序的主要入口点。
<action android:name="android.intent.action.MAIN"/>
//表示该组件可以作为应用程序的启动器
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
主要入口点是指当用户点击应用程序图标时,系统将启动具有此 Intent Action 的组件。
启动器是 Android 应用程序的入口点,当用户点击应用程序图标时,系统将启动包含此 Intent Filter 的组件,从而作为应用程序的入口点。
2、ViewBinding
2.1 什么是ViewBinding
WiewBinding总体来说其实非常简单,它的目的只有一个,就是为了避免编写findViewById,这和它另外一个非常复杂的兄弟DataBinding相比有明显的区别。
要想使用ViewBinding需要注意两件事。第一,确保你的Android Studio是3.6或更高的版本。第二,在你项目工程模块的build.gradle中加入以下配置:
android {
...
buildFeatures {
viewBinding true
}
}
2.2 在Activity中使用ViewBinding
一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类and。
Binding类的命名规则是将布局文件按驼峰方式重命名后,再加上Binding作为结尾。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirstLayoutBinding binding = FirstLayoutBinding.inflate(getLayoutInflater()); //获得一个binding
/**
* 它的作用是将一个布局文件与当前的 Activity 关联,从而在屏幕上显示出该布局。
* 相当于:setContentView(R.layout.first_layout);
* binding.getRoot() 返回根视图,也就是布局文件的最外层视图。
*/
setContentView(binding.getRoot());
TextView textView = binding.button1; //通过绑定对象binding获取一个TextView
/**
* 通过 textView 来操作该视图元素,例如设置文本内容、更改样式等。
*/
textView.setText("hell"); //修改button的名称
}
}
getLayoutInflater()的作用:
在 Android 中,布局文件是用 XML 格式来描述界面的,而
LayoutInflater
则负责将这些 XML 布局文件解析并转换成对应的 View 对象。这样,我们就可以在代码中动态地使用这些 View 对象,进行界面的显示和交互操作。
原本运行结果如下:
通过textView.setText修改后结果如下:
3、Toast提醒
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = (Button) findViewById(R.id.button1); //获取Button对象
/**
* 调用setOnClickListener()方法获取button按钮的监听器,传入一个现实对象编写监听器发生事件
*/
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"这是一个通知", Toast.LENGTH_SHORT).show();
}
});
}
}
Toast 是 Android 中一种轻量级的通知机制,用于在屏幕底部显示一条短暂的消息。makeText()
方法有三个参数:
-
Context context
:这个参数表示要显示 Toast 的上下文(Context)。在你的代码中,你可以使用MainActivity.this
或getApplicationContext()
来传递上下文。 -
CharSequence text
:这个参数表示要显示的提示文本。在你的代码中,提示文本是 “这是一个通知”。 -
int duration
:这个参数表示 Toast 的持续时间,可以是Toast.LENGTH_SHORT
或Toast.LENGTH_LONG
。-
Toast.LENGTH_SHORT
:表示 Toast 将在屏幕上显示一段较短的时间,通常为约 2 秒钟。 -
Toast.LENGTH_LONG
:表示 Toast 将在屏幕上显示一段较长的时间,通常为约 3.5 秒钟。
-
getApplicationContext()
是一个用于获取应用程序的全局上下文(Context)的方法。在 Android 开发中,Context
是一个非常重要的概念,它提供了访问应用程序环境和资源的接口,以及执行各种操作的能力。
getApplicationContext()
方法是 Context
类的一个成员方法,它可以在任何继承自 Context
的类中调用。它通常用于获取一个全局的、应用程序级别的上下文。全局上下文的生命周期与应用程序的生命周期一致,意味着它在整个应用程序的运行期间都存在,不受当前 Activity 或其他组件的生命周期的影响。
4、Menu菜单
4.1 创建并显示菜单
首先在ret下创建一个Menu文件夹,然后创建一个菜单文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- id:指定菜单的唯一标识符-->
<!-- title: 指定菜单的名称 -->
<item android:id="@+id/add_item"
android:title="Add"/>
<item android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
重写onCreateOptionsMenu()方法,调用刚刚编写的菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
通过getMenuInflater()
方法能够得到MenuInflater
对象,再调用它的inflate()
方法就可以给当前活动创建菜单了。inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里当然传入R.menu.main
。第二个参数用于指定我们的单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()
方法中传入的menu参数。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。
4.2 定义菜单响应事件
重写onOptionsItemSelected()
方法响应菜单。onOptionsItemSelected()
方法是用于处理选项菜单(OptionsMenu)或上下文菜单(ContextMenu)中菜单项被选择的回调方法。
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId(); //点击菜单功能后响应的Id值
/**
* 通过不同的Id触发不同响应事件
*/
if(itemId == R.id.add_item){
Toast.makeText(this,"you are Add", Toast.LENGTH_SHORT).show();
} else if (itemId == R.id.remove_item) {
Toast.makeText(this, "you are remove", Toast.LENGTH_SHORT).show();
}
return true;
}
4.3、销毁一个活动
使用Back键或者使用finish()
方法。我们在活动中调用一下这个方法就能实现结束活动功能。注意finish
销毁的是当前活动而不是全部活动。