Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Kotlin으로 안드로이드 오버플로우 메뉴 아이콘을 프로그래밍 방식으로 변경하는 방법

이 튜토리얼에서는 Kotlin을 사용해 안드로이드 앱의 오버플로우(Overflow) 메뉴 아이콘을 프로그래밍 방식으로 변경하는 방법을 단계별로 살펴봅니다.

1단계 — 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고, 새 프로젝트를 만드는 데 필요한 모든 정보를 입력하여 프로젝트를 생성합니다.

2단계 — 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:padding="4dp"
    tools:context=".MainActivity">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/tootBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

3단계 — MainActivity 작성

src/MainActivity.kt 파일에 다음 코드를 추가합니다.

import android.graphics.Color
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
    lateinit var toolBar: Toolbar
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        toolBar = findViewById(R.id.tootBar)
        toolBar.title = "MyToolBar"
        toolBar.setTitleTextColor(Color.WHITE)
    }
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        val inflater = menuInflater
        inflater.inflate(R.menu.menu, menu)
        return true
    }
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.option1 -> {
                Toast.makeText(
                    applicationContext, "Bluetooth Option Selected",
                    Toast.LENGTH_SHORT
                ).show()
                true
            }
            R.id.option2 -> {
                Toast.makeText(applicationContext, "Call Option Selected", Toast.LENGTH_SHORT)
                    .show()
                true
            }
            R.id.option3 -> {
                Toast.makeText(applicationContext, "About Option Selected", Toast.LENGTH_SHORT)
                    .show()
                true
            }
            R.id.option4 -> {
                Toast.makeText(applicationContext, "Chat Option Selected", Toast.LENGTH_SHORT)
                    .show()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
    override fun onPrepareOptionsMenu(menu: Menu): Boolean {
        invalidateOptionsMenu()
        menu.findItem(R.id.option2).isVisible = false
        menu.findItem(R.id.option4).isVisible = true
        return super.onPrepareOptionsMenu(menu)
    }
}

위 코드에서는 onCreateOptionsMenu()에서 메뉴를 인플레이트하고, onOptionsItemSelected()에서 각 메뉴 항목 선택 시 토스트 메시지를 표시하도록 처리했습니다. 또한 onPrepareOptionsMenu()에서 특정 메뉴 항목의 표시 여부를 동적으로 제어할 수 있습니다.

4단계 — 메뉴 리소스 파일 추가

res 폴더에 Android Resource Directory(menu)를 생성한 뒤, 메뉴 리소스 파일을 만들고 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/option1"
        android:orderInCategory="1"
        android:title="Bluetooth"
        android:icon="@drawable/ic_baseline_bluetooth_24"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/option2"
        android:orderInCategory="2"
        android:title="Call"
        android:icon="@drawable/ic_baseline_call_24"
        app:showAsAction="ifRoom|collapseActionView" />
    <item android:id="@+id/option4"
        android:title="Chat"
        android:visible="false"
        android:orderInCategory="3"
        android:icon="@drawable/ic_baseline_chat_24"
        app:showAsAction="ifRoom|collapseActionView"/>
    <item
        android:id="@+id/option3"
        android:title="About"
        app:showAsAction="never" />
</menu>

여기서 app:showAsAction="never"로 설정된 항목은 툴바에 직접 표시되지 않고 오버플로우 메뉴(점 세 개 아이콘) 안에 포함됩니다.

5단계 — AndroidManifest.xml 수정

androidManifest.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.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>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 상단 툴바의 Kotlin으로 안드로이드 오버플로우 메뉴 아이콘을 프로그래밍 방식으로 변경하는 방법 실행 아이콘을 클릭하세요. 실행 옵션에서 자신의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 나타납니다.

Kotlin으로 안드로이드 오버플로우 메뉴 아이콘을 프로그래밍 방식으로 변경하는 방법

Kotlin으로 안드로이드 오버플로우 메뉴 아이콘을 프로그래밍 방식으로 변경하는 방법