카테고리 없음

Kotlin으로 메뉴 만들고 메뉴 이용해 TextView 글자색 변경, 글자 배경 변경하기

NomadHaven 2022. 2. 7. 01:16
파일 생성

res/menu 폴더에 context_menu_main.xml 파일 생성

 

context_menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/text_color"
        android:title="글자색 변경"/>
    <item
        android:id="@+id/text_back_color"
        android:title="배경색 변경" />
    <item
        android:id="@+id/text_basic"
        android:title="초기화"/>
</menu>

메뉴 구성하는 항목 만들기

 

build.gradle(:app)
plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.sample13"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures{
        viewBinding true
    }

}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

 

 

기존 코드에서

buildFeatures{
    viewBinding true
}

부분 추가되었다.

 

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ContextMenu 보기"
            android:textSize="30sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main에서는 메뉴에 대한 내용이 존재하지 않는다.

 

MainActivity.kt

 

package com.example.sample13

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.ContextMenu
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import com.example.sample13.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater)}

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main) 아래의 binding.root 이용하므로 주석처리
        setContentView(binding.root)

       registerForContextMenu(binding.textView)
    //메뉴를 activity메인에 있는 textView에 넣는다. 화면상 "ContextMenu보기" 를 꾹 누르면 메뉴가 뜬다.

    }

    override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
        menuInflater.inflate(R.menu.context_menu_main, menu) 
        //R은 res 폴더의 약자. res폴더 안에 있는 context_menu_main.xml 파일과 연결시킨다.
    }

    override fun onContextItemSelected(item: MenuItem): Boolean {
        val textView = findViewById<TextView>(R.id.textView)
        //item id가 무엇이었을때?
        when(item?.itemId){
            R.id.text_color -> {
                textView.text = "글자색 변경" 
                textView.setTextColor(Color.CYAN) 
                //메뉴중 text_color라는 항목을 선택했을시, 화면의 textView를 "글자색 변경" 이라표시
                //글자색은 Cyan색으로 변경
            }
            R.id.text_back_color-> {
                textView.text = "배경색 변경"
                textView.setBackgroundColor(Color.DKGRAY) //진한 회새개으로 글자 배경색 변경
            }
            R.id.text_basic -> {
                textView.text= "초기화"
            }
            

        }





        return super.onContextItemSelected(item)
    }
}
결과화면