文章目录
开发环境和工具配置
系统:Windows10
工具:Android Studio
,版本:2022.3.19
语言:Java
(版本:17)
1. 新建项目
Basic Views Activity
2. 成品的目录结构
3. 代码汇集
3.1 MainActivity.java
package com.example.my_notes_record;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity {
final String TAG = "FXS"; // 定义一个日志标签,用于调试
FloatingActionButton btn; // 声明一个悬浮按钮
// 定义一个 ActivityResultLauncher
private ActivityResultLauncher<Intent> someActivityResultLauncher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 设置布局文件为activity_main
btn = findViewById(R.id.fab); // 通过ID查找悬浮按钮视图
// 初始化 ActivityResultLauncher
someActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) { // 如果返回结果为 RESULT_OK
Intent data = result.getData(); // 获取从 EditActivity 返回的数据
if (data != null) {
String edit = data.getStringExtra("input"); // 从返回的数据中获取名为 "input" 的字符串
Log.d(TAG, "点击事件\t" + edit); // 在日志中打印字符串
}
}
}
);
// 设置悬浮按钮的点击事件监听器
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 创建一个用于启动 EditActivity 的 Intent
Intent intent = new Intent(MainActivity.this, EditActivity.class);
someActivityResultLauncher.launch(intent); // 使用 ActivityResultLauncher 启动 EditActivity
}
});
}
}
3.2EditActivity.java
package com.example.my_notes_record;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import java.security.Key;
public class EditActivity extends AppCompatActivity {
EditText et; // 声明一个 EditText 控件用于用户输入文本
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_layout); // 设置布局文件为 edit_layout
et = findViewById(R.id.et); // 通过 ID 查找 EditText 视图,用于获取用户输入的文本
}
// 当按下硬件按键时触发的方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME) { // 如果按下的是 HOME 键
return true; // 返回 true,表示已处理该按键事件
} else if (keyCode == KeyEvent.KEYCODE_BACK) { // 如果按下的是返回键
Intent intent = new Intent(); // 创建一个新的 Intent 对象
intent.putExtra("input", et.getText().toString()); // 将 EditText 中的文本数据放入 Intent 中,使用名为 "input" 的键
setResult(RESULT_OK, intent); // 设置返回结果为 RESULT_OK,并将 Intent 作为结果数据返回
finish(); // 结束 EditActivity
return true; // 返回 true,表示已处理该按键事件
}
return super.onKeyDown(keyCode, event); // 如果按下的不是上述两个键,使用默认的按键处理方法
}
}
3.3 baseline_add_24.xml
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>
3.4 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="133dp"
android:layout_marginTop="342dp"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="32dp"
android:layout_marginBottom="28dp"
android:clickable="true"
tools:srcCompat="@drawable/baseline_add_24" />
</RelativeLayout>
3.5 edit_layout.xml
<?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">
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top">
</EditText>
</LinearLayout>
4.文件之间的关联
-
MainActivity.java:
- 作用:主要用于应用的启动和主界面的展示,以及与其他活动的交互。
- 关联:
- 通过
someActivityResultLauncher
启动编辑笔记的EditActivity
。 - 响应编辑笔记后返回的数据,将编辑的文本数据打印到日志中。
- 包含一个悬浮按钮(
FloatingActionButton
)用于启动编辑笔记。
- 通过
- 布局关联:使用
setContentView(R.layout.activity_main)
将布局文件activity_main.xml
与MainActivity
关联。
-
EditActivity.java:
- 作用:用于编辑笔记的活动,允许用户输入文本,并将编辑后的文本数据返回给
MainActivity
。 - 关联:
- 接收从
MainActivity
传递过来的启动数据,包括编辑前的文本数据。 - 允许用户编辑文本,并在按下返回键时将编辑后的文本数据返回给
MainActivity
。
- 接收从
- 布局关联:使用
setContentView(R.layout.edit_layout)
将布局文件edit_layout.xml
与EditActivity
关联。
- 作用:用于编辑笔记的活动,允许用户输入文本,并将编辑后的文本数据返回给
-
baseline_add_24.xml:
- 作用:定义了一个矢量图标,表示“添加”操作的图标。
- 关联:在
activity_main.xml
中使用tools:srcCompat="@drawable/baseline_add_24"
将该图标与悬浮按钮关联,用于在主界面上添加新的笔记。
-
activity_main.xml:
- 作用:定义了主界面的布局,包括显示笔记列表的
TextView
和用于添加新笔记的悬浮按钮。 - 关联:
- 使用
FloatingActionButton
来添加悬浮按钮,并为其设置点击事件,以便启动编辑笔记的EditActivity
。 - 包含一个用于显示文本的
TextView
,这里仅作为示例展示 “Hello World!”。
- 使用
- 作用:定义了主界面的布局,包括显示笔记列表的
-
edit_layout.xml:
- 作用:定义了编辑笔记的布局,包括一个可供用户输入文本的
EditText
。 - 关联:
EditActivity
使用此布局来显示编辑笔记的界面,并允许用户输入和编辑文本。
- 作用:定义了编辑笔记的布局,包括一个可供用户输入文本的
5. 结果演示
点击上图中的悬浮按钮后,将跳转页面,见下图;
如上图所示,你可以在此界面编写。
芜湖!写好喽!
接下来,点击手机(AVD)的后退按键,你将在
logcat
界面见到你输入的信息(见下图)。记得筛选词哦~~