Android学习笔记
Android项目结构
本文相关内容来自Android developer教程学习笔记
1.app模块下的文件目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugtSGHVk-1632494011176)(image/image_1.png)]
首先,确保已打开 Project 窗口(依次选择 View > Tool Windows > Project ),并从该窗口顶部的下拉列表中选择 Android 视图。随后,您可以看到以下文件: app > java > com.example.myfirstapp > MainActivity 这是主 activity。它是应用的入口点。当您构建和运行应用时,系统会启动此 [Activity](https://developer.android.google.cn/reference/android/app/Activity) 的实例并加载其布局。 app > res > layout > activity_main.xml 此 XML 文件定义了 activity 界面 (UI) 的布局。它包含一个 [TextView](https://developer.android.google.cn/reference/android/widget/TextView) 元素,其中具有“Hello, World!”文本 app > manifests > AndroidManifest.xml 清单文件描述了应用的基本特性并定义了每个应用组件。 Gradle Scripts > build.gradle
构建简单页面
微件是View对象,即按钮和文本框等界面组件。
Android 提供了 ViewGroup 和 View 类的 XML 词汇表,因此界面的大部分内容都在 XML 文件中定义。不过,本节课将向您介绍如何使用 Android Studio 的布局编辑器创建布局,而不是教您编写 XML 代码。布局编辑器会在您拖放视图构建布局时为您编写 XML 代码。
首先,请按照以下步骤设置工作区:
????1. 在 Project 窗口中,依次打开 app > res > layout > activity_main.xml 。 ????2. 若要给布局编辑器留出空间,请隐藏 Project 窗口。为此,请依次选择 View > Tool Windows > Project ,或直接点击 Android Studio 屏幕左侧的 Project 。 ????3. 如果您的编辑器显示 XML 源代码,请点击窗口右上角的 Design 标签页。 ????4. 点击 (Select Design Surface ),然后选择 Blueprint 。 ????5. 点击布局编辑器工具栏中的 (View Options ),并确保选中 Show All Constraints 。 ????6. 确保 Autoconnect 处于关闭状态。当 Autoconnect 处于关闭状态时,工具栏中的提示会显示 (Enable Autoconnection to Parent )。 ????7. 点击工具栏中的 (Default Margins ),然后选择 16 。如果需要,您可以稍后调整每个视图的外边距。 ????8. 点击工具栏中的 (Device for Preview ),然后选择 5.5, 1440 × 2560, 560 dpi (Pixel XL) 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6b1fm1Bn-1632494011178)(image/image_2.png)]
????显示如图所示
????若要预览界面,请点击工具栏中的 (Select Design Surface ),然后选择 Design 。请注意,文本输入和按钮标签应设置为默认值。 ????若要更改界面字符串,请按以下步骤操作: ????1. 打开 Project 窗口,然后打开 app > res > values > strings.xml 。 ????这是一个字符串资源文件,您可在此文件中指定所有界面字符串。您可以利用该文件在一个位置管理所有界面字符串,使字符串的查找、更新和本地化变得更加容易。 ????2. 点击窗口顶部的 Open editor 。此时将打开 Translations Editor,它提供了一个可以添加和修改默认字符串的简单界面。它还有助于让所有已翻译的字符串井然有序。 ????3. 点击 (Add Key ) 可以创建一个新字符串作为文本框的“提示文本”。此时会打开如图 7 所示的窗口。 ????图 7. 用于添加新字符串的对话框 ????在 Add Key 对话框中,完成以下步骤: ????1. 在 Key 字段中输入“edit_message”。 ????2. 在 Default Value 字段中输入“Enter a message”。 ????3. 点击 OK 。 ????4. 再添加一个名为“button_send”且值为“Send”的键。 ????现在,您可以为每个视图设置这些字符串。若要返回布局文件,请点击标签页栏中的 activity_main.xml 。然后,添加字符串,如下所示: ????1. 点击布局中的文本框。如果右侧还未显示 Attributes 窗口,请点击右侧边栏上的 Attributes 。 ????2. 找到 text 属性(当前设为“Name”)并删除相应的值。 ????3. 找到 hint 属性,然后点击文本框右侧的 (Pick a Resource )。在显示的对话框中,双击列表中的 edit_message 。 ????4. 点击布局中的按钮,找到其 text 属性(当前设为“Button”)。然后点击 (Pick a Resource ),并选择 button_send 。 ????## 让文本框大小可灵活调整 ????若要创建一个适应不同屏幕尺寸的布局,您需要让文本框拉伸以填充去除按钮和外边距后剩余的所有水平空间。 ????继续操作之前,请点击工具栏中的 (Select Design Surface ),然后选择 Blueprint 。 ????若要让文本框大小可灵活调整,请按以下步骤操作: ????图 8. 选择 Create Horizontal Chain 后所得到的结果 ????图 9. 点击以将宽度更改为 Match Constraints图 10. 文本框现在拉伸以填充剩余空间 ????1. 选择两个视图。若要执行此操作,请点击一个视图,在按住 Shift 键的同时点击另一个视图,然后右键点击任一视图并依次选择 Chains > Create Horizontal Chain 。布局随即显示出来,如图 8 所示。 ????链是两个或多个视图之间的双向约束条件,可让您采用一致的方式安排链接的视图。 ????2. 选择按钮并打开 Attributes 窗口。然后使用 Constraint Widget 将右外边距设为 16 dp。 ????3. 点击文本框以查看其属性。然后,点击宽度指示器两次,确保将其设置为锯齿状线 (Match Constraints ),如图 9 中的标注 1 所示。 ????“Match constraints”表示宽度将延长以符合水平约束条件和外边距的定义。因此,文本框将拉伸以填充去除按钮和所有外边距后剩余的水平空间。
????1. 在 app > java > com.example.myfirstapp > MainActivity 文件中,添加以下 sendMessage() 方法桩:
????????KotlinJava
????????public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } / Called when the user taps the Send button / public void sendMessage(View view) { // Do something in response to button } *
????????}
????????您可能会看到一条错误,因为 Android Studio 无法解析用作方法参数的 View 类。若要清除错误,请点击 View 声明,将光标置于其上,然后按 Alt+Enter(在 Mac 上则按 Option+Enter)进行快速修复。如果出现一个菜单,请选择 Import class 。
????2. 返回到 activity_main.xml 文件,并从该按钮调用此方法:
????????1. 选择布局编辑器中的相应按钮。
????????2. 在 Attributes 窗口中,找到 onClick 属性,并从其下拉列表中选择 sendMessage [MainActivity] 。
????????现在,当用户点按该按钮时,系统将调用 sendMessage() 方法。
????????请注意此方法中提供的详细信息。系统需要这些信息来识别此方法是否与 android:onClick 属性兼容。具体来说,此方法具有以下特性:
????????- 公开。
????????- 返回值为空,或在 Kotlin 中为隐式 Unit。
????????- [View](https://developer.android.google.cn/reference/android/view/View) 是唯一的参数。这是您在第 1 步结束时点击的 [View](https://developer.android.google.cn/reference/android/view/View) 对象。
????3. 接下来,填写此方法,以读取文本字段的内容,并将该文本传递给另一个 activity。
????mainActivity.java文件
package com.example.myapplicationjinlv;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user taps the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.editTextTextPersonName);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
????DisplayMessageActivity
package com.example.myapplicationjinlv;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class DisplayMessageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
// Capture the layout's TextView and set the string as its text
TextView textView = findViewById(R.id.textView);
textView.setText(message);
}
}
运行结果
|