Giới thiệu
Hướng dẫn này trình bày cách đọc nội dung từ một file text nằm trong thư mục res/raw và hiển thị lên TextView trong ứng dụng Android sử dụng Kotlin.
Các bước thực hiện
Bước 1: Tạo dự án mới
Tạo project mới trong Android Studio qua File → New Project.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:onClick="readTextFile"
android:text="Read Text File" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Read text File in Android"
android:textAlignment="center"
android:textColor="@android:color/background_dark"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/button"
android:layout_marginTop="10dp"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
Bước 3: Tạo file text trong res/raw
- Chuột phải vào thư mục
res→ New → Android Resource Directory - Chọn Resource type: raw, đặt tên thư mục là
raw - Chuột phải vào thư mục
raw→ New → File, đặt tênsample.txt - Thêm nội dung mẫu vào file này
Bước 4: Xử lý logic (src/MainActivity.kt)
import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
class MainActivity : AppCompatActivity() {
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
textView = findViewById(R.id.textView)
}
fun readTextFile(view: View) {
val stringBuilder = StringBuilder()
val inputStream: InputStream = resources.openRawResource(R.raw.sample)
val reader = BufferedReader(InputStreamReader(inputStream))
try {
var line: String?
while (reader.readLine().also { line = it } != null) {
stringBuilder.append(line).append("\n")
}
textView.text = stringBuilder.toString()
Toast.makeText(baseContext, stringBuilder.toString(), Toast.LENGTH_LONG).show()
} catch (e: IOException) {
e.printStackTrace()
} finally {
try {
inputStream.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
}
}
Bước 5: Cấu hình Manifest (androidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Khi nhấn nút "Read Text File", nội dung file sample.txt sẽ được đọc và hiển thị trên TextView cũng như Toast.
Cải tiến khuyến nghị
Code gốc có lỗi logic trong vòng lặp while (gán textView.text bên trong vòng lặp). Phiên bản trên đã sửa lại: đọc toàn bộ file trước, sau đó gán một lần duy nhất. Ngoài ra, nên sử dụng use extension function của Kotlin để tự động đóng stream:
fun readTextFile(view: View) {
resources.openRawResource(R.raw.sample).bufferedReader().use { reader ->
val content = reader.readText()
textView.text = content
Toast.makeText(baseContext, content, Toast.LENGTH_LONG).show()
}
}