상세 컨텐츠

본문 제목

CleverPad 앱 개발 이야기: 초보 개발자의 도전기 2

공부/Kotlin

by micalcomanie 2025. 1. 12. 00:14

본문

728x90
반응형
SMALL

2. 주요 기능 개발

앱의 주요 기능을 구현하는 과정에서 사용한 코드와 기법을 설명합니다.

(1) 메모 작성 및 저장 기능

메모를 작성하고 저장하는 기능은 SharedPreferences를 활용하여 간단히 구현할 수 있습니다.

코드: NoteDetailActivity

private fun saveNoteAndFinish() {
    val title = titleEditText.text.toString().trim()
    val body = bodyEditText.text.toString().trim()

    if (title.isNotEmpty() || body.isNotEmpty()) {
        val resultIntent = Intent()
        resultIntent.putExtra("noteTitle", title)
        resultIntent.putExtra("noteBody", body)
        setResult(RESULT_OK, resultIntent)
    } else {
        Toast.makeText(this, "내용을 입력하세요.", Toast.LENGTH_SHORT).show()
    }
    finish()
}
  • 설명: 사용자가 메모를 작성한 뒤 저장 버튼을 누르면 제목과 내용을 인텐트로 반환합니다.
  • 활용 기술: Intent, EditText.

(2) 뒤로가기 버튼 확인 팝업

메모가 수정 중일 때 뒤로가기를 눌렀을 때 확인 팝업을 띄워 저장 여부를 묻습니다.

코드: AlertDialog 사용

override fun onBackPressed() {
    AlertDialog.Builder(this)
        .setTitle("저장되지 않았습니다")
        .setMessage("저장하지 않고 나가시겠습니까?")
        .setPositiveButton("확인") { _, _ ->
            finish()
        }
        .setNegativeButton("취소", null)
        .show()
}
  • 설명: AlertDialog를 사용해 사용자가 작업을 중단할 때 확인받습니다.

(3) 텍스트 서식 적용

메모에 굵게, 기울임, 밑줄 서식을 추가합니다.

코드: StyleSpan과 UnderlineSpan 활용

private fun applyStyleToSelectedText(style: Any) {
    val start = bodyEditText.selectionStart
    val end = bodyEditText.selectionEnd
    if (start < end) {
        val spannableString = bodyEditText.text
        spannableString.setSpan(style, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        bodyEditText.setText(spannableString)
        bodyEditText.setSelection(start, end)
    } else {
        Toast.makeText(this, "텍스트를 선택해주세요.", Toast.LENGTH_SHORT).show()
    }
}
  • 설명: 텍스트의 특정 범위에 서식을 적용하며, 사용자가 선택한 텍스트에 반영됩니다.

(4) 스플래시 화면 구현

앱 로딩 시 브랜드 이미지를 보여주는 스플래시 화면을 구현했습니다.

코드: SplashActivity

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        startActivity(Intent(this, MainActivity::class.java))
        finish()
    }
}​

코드: Layer-List를 활용한 배경 이미지

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splash_screen" />
    </item>
</layer-list>
  • 설명: XML Layer-List를 사용해 스플래시 화면의 배경색과 이미지를 조합합니다.

(5) 사용자 경험(UX) 개선

메모 복사 및 공유

메모 내용을 복사하거나 다른 앱으로 공유할 수 있습니다.

private fun shareNote() {
    val title = titleEditText.text.toString()
    val body = bodyEditText.text.toString()
    val fullNote = "Title: $title\n\n$body"

    val shareIntent = Intent().apply {
        action = Intent.ACTION_SEND
        type = "text/plain"
        putExtra(Intent.EXTRA_TEXT, fullNote)
    }
    startActivity(Intent.createChooser(shareIntent, "메모 공유"))
}
  • 설명: 작성한 메모를 공유하기 위해 Intent.ACTION_SEND를 사용합니다.
728x90
반응형
LIST

관련글 더보기