项目档案

创建视图项目

长期以来,我们一直使用Jetpack Compose来构建我们的Android项目。今天的示例将演示如何使用旧的Views系统。

Android Studio仍然允许我们使用这个旧系统创建一个新项目。要访问旧系统,我们必须在设置项目时做出一个不同的选择。设置新项目的第一步是选择项目类型。长期以来,我们一直使用“Empty Activity”选项来设置一个新项目。该选项默认使用Kotlin和Jetpack Compose。要创建一个Views项目,我们必须从“Empty Views Activity”选项开始。

我们的项目设置后,我们将有一个活动的赢博体育程序的启动代码。活动的Kotlin代码将出现在名为MainActivity的文件中。而用户界面的XML代码将出现在res/layout文件夹中名为activity_mail.xml的单独文件中。

使用布局编辑器

打开这个XML文件将打开图形用户界面编辑器窗口。

在该编辑器的中心,您可以看到显示视图用户界面的可视化表示的窗格。左边是一个调色板,它提供了对我们可以放置在视图中的各种组件的访问,还有一个组件树,它显示了视图中组件的层次结构。在右边,您将看到Attributes视图,它使我们能够访问组件的属性。

组件最重要的属性是它的id。我们将在代码中使用id来访问该组件。在图中的第一个视图中,有一个id为nameEdit的EditText组件和一个id为greeingbutton的按钮。

使用约束

视图中组件的默认容器是ConstraintLayout,它使用约束系统来帮助定位视图中的项。下面是编辑器中视图的详细介绍,显示了视图中按钮的约束句柄。

约束句柄在按钮的四边显示为四个空圆圈。为了帮助定位组件在视图中的位置,我们可以从这些圆圈拖动到其他组件或视图的边缘。在上面的图片中,我将按钮的顶部连接到它上面的文本字段的底部,并将按钮的侧面连接到视图的左右边缘。这将使按钮位于视图中心的文本框下方。

在Attributes检查器的Constraint Widget部分中,您可以看到有关约束的更多细节。框上方的数字24表示我已将按钮放置在文本字段下方24像素处。

活动的代码

下面是来自MainActivity的第一个视图的代码。kt文件。

类MainActivity: AppCompatActivity() {lateinit var textField: EditText lateinit var greetingButton:按钮覆盖fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_main) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) {v, insets -> val systemBars = insets. getinsets (WindowInsetsCompat.Type.systemBars()) v. setpadding (systemBars。离开了,systemBars。前,systemBars。textField = findViewById(R.id.nameEdit) greetingButton = findViewById(R.id.greetingButton) greetingButton。setOnClickListener {val intent = intent (this,GreetingActivity::class.java) intent. putextra ("NAME",textField.text.toString()) startActivity(intent)}}}

在这里,您将看到视图中两个组件的成员变量。onCreate()方法负责在视图第一次出现时完成视图的设置。在该方法中,您将看到我使用findViewById()方法来获取对这两个组件的引用。

在这里,您还将看到一个如何将单击侦听器附加到按钮的示例。在下一节中,我将更详细地解释这个侦听器中的代码。

设置第二个视图

在我们的简单演示程序中,我们将有两个视图。第一个视图在我们设置项目时自动创建。

要创建第二个视图,我们右键单击包含第一个活动代码的包,并选择New/ activity /Empty Views activity选项。在出现的对话框中,我们为新活动输入名称GreetingActivity。这还将在res/layout文件夹中创建一个activity_greeting.xml文件,我们可以用它来为新活动设置用户界面。

将数据从一个视图传递到另一个视图

当我们的赢博体育程序运行时,我希望用户能够在第一个视图中输入他们的名字。

在他们点击“问候我!”按钮,我们希望第二个视图显示个性化的问候语。

为了实现这一点,我们必须将用户从第一个活动输入的名称传递到第二个活动。做到这一点的关键在于第一个活动用来启动第二个活动的代码。下面是按钮的点击监听器代码:

greetingButton。setOnClickListener {val intent = intent (this,GreetingActivity::class.java) intent. putextra ("NAME",textField.text.toString()) startActivity(intent)}

为了启动一个新的活动,我们使用一个intent对象。Intent有一个父类和一个目标类。Intent类提供了一组putExtra()方法,我们可以调用这些方法来将额外的数据存储在Intent中,以便传递给新activity。其中最基本的是putExtra()方法,它接受两个参数:数据项的名称和项的值。

一旦Intent设置好了,我们就通过调用startActivity()方法来启动新的activity。

在第二个活动中,我可以把代码从启动活动的意图中提取额外的数据。这通常在活动的onCreate()方法中完成。

下面是第二个活动的代码:

类GreetingActivity: AppCompatActivity() {lateinit var textView: textView override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_greeting) viewpat . setonapplywindowinsetslistener (findViewById(R.id.main)) {v, insets -> val systemBars = insets. getinsets (windowinsetspat . type .systemBars()) v. setpadding (systemBars。离开了,systemBars。前,systemBars。右,systemBars.bottom) insets} textView = findViewById(R.id.message) val intent = getIntent() val name = intent. getstringextra (" name ") val greeting = “Welcome to Android, ${name}!”Text = greeting}}

我们通过调用getIntent()方法来访问启动我们的Intent。然后我们可以调用适当的getExtra()方法从Intent中提取有用的数据。

这使我们能够获取用户名,为他们构造问候语,然后将该问候语放置在文本视图中。