请用android studio的cotlin语言写一个记事本
时间: 2024-03-22 07:42:31 浏览: 73
好的,以下是一个简单的记事本应用程序的示例,使用 Kotlin 语言编写。
首先,创建一个新的 Android 项目,并在 `build.gradle` 文件中添加以下依赖项:
```groovy
dependencies {
// Kotlin 标准库
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21'
// Android 标准库
implementation 'androidx.core:core-ktx:1.6.0'
// UI 组件
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
// 文件访问
implementation 'androidx.documentfile:documentfile:1.0.1'
}
```
接下来,创建一个新的 Activity,并添加以下布局文件:
```xml
<!-- activity_main.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Toolbar
android:id="@+id/toolbar"
android:title="@string/app_name"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:inputType="textMultiLine"
android:scrollbars="vertical"/>
</LinearLayout>
```
这个布局文件包含一个带有工具栏的 EditText 组件,用于显示和编辑文本内容。
接下来,在 Activity 中添加以下代码:
```kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.EditText
import androidx.appcompat.widget.Toolbar
import androidx.documentfile.provider.DocumentFile
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.OutputStreamWriter
class MainActivity : AppCompatActivity() {
private lateinit var toolbar: Toolbar
private lateinit var editText: EditText
private var currentFile: DocumentFile? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
toolbar = findViewById(R.id.toolbar)
editText = findViewById(R.id.edit_text)
setSupportActionBar(toolbar)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId) {
R.id.action_open -> openFile()
R.id.action_save -> saveFile()
}
return true
}
private fun openFile() {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "text/*"
}
startActivityForResult(intent, REQUEST_OPEN_FILE)
}
private fun saveFile() {
val text = editText.text.toString()
if (currentFile == null) {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "text/plain"
putExtra(Intent.EXTRA_TITLE, "note.txt")
}
startActivityForResult(intent, REQUEST_CREATE_FILE)
} else {
contentResolver.openOutputStream(currentFile!!.uri)?.use {
OutputStreamWriter(it).apply {
write(text)
flush()
}
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
when(requestCode) {
REQUEST_OPEN_FILE -> {
data?.data?.also { uri ->
contentResolver.openInputStream(uri)?.use {
BufferedReader(InputStreamReader(it)).use { reader ->
editText.setText(reader.readText())
}
}
currentFile = DocumentFile.fromSingleUri(this, uri)
}
}
REQUEST_CREATE_FILE -> {
data?.data?.also { uri ->
contentResolver.openOutputStream(uri)?.use {
OutputStreamWriter(it).apply {
write(editText.text.toString())
flush()
}
}
currentFile = DocumentFile.fromSingleUri(this, uri)
}
}
}
}
}
companion object {
private const val REQUEST_OPEN_FILE = 1
private const val REQUEST_CREATE_FILE = 2
}
}
```
这个 Activity 包含一个工具栏、一个 EditText 组件和一些用于打开和保存文件的方法。当用户点击工具栏上的“打开”菜单时,它会打开文件选择器,然后读取选择的文件并在 EditText 中显示它。当用户点击“保存”菜单时,它会将 EditText 中的文本保存到当前文件或创建一个新文件并保存文本。
注意,这个示例使用了 Android 的 DocumentFile API,它可以让你访问 Android 设备上的文件系统,包括外部存储和云存储。如果你想要使用传统的文件访问方法,请使用 File API。
阅读全文