[안드로이드 스튜디오] 옵션메뉴

이제·2021년 6월 4일
0

옵션메뉴 만들기

activity_main.xml 코드


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
              
    <!--옵션메뉴를 선택하면 레이아웃 배경색을 바꿀  있게 메뉴를 
만들 것이므로 레이아웃에 아이디를 지정해준다.--!>

    android:id="@+id/base">



</LinearLayout>

menu1.xml 코드


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/red"
        android:title="빨간색"></item>

    <item
        android:id="@+id/blue"
        android:title="파란색"></item>


    <item android:title="추가메뉴">

        <menu>

            <item
                android:id="@+id/yellow"
                android:title="노란색"></item>

            <item
                android:id="@+id/green"
                android:title="초록색"></item>

        </menu>

    </item>

</menu>

java코드

➰ 옵션 메뉴를 실행시켜주는 메소드 - onCreatOptionMenu

➰ Oncreat 메소드 밖에!! 커서 위치 후

➰ Code-->Override Methods-->Android.app.Acticity-->onCreatOptionsMenu 선택


@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);

이렇게 불러와진 상태에서, 마지막 행의 return과 super.onCreatOptionsMenu를 분리시켜줌***(아래와 같이) + return 뒤에 'true;'추가


package com.cookandroid.w10_menu;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        
        return true;
    }

}
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        
        //메뉴 인플레이터 선언과 inflate 함수 작성
        MenuInflater m = getMenuInflater();
        m.inflate(R.menu.menu1, menu);

        return true;
    }

➰ 옵션 메뉴에서 특정 옵션을 선택했을 때 실행시켜주는 메소드 추가 - onOptionsItemSelected

➰ onCreatOptionsMenu 메소드 밖에!! 커서 위치 후

➰ Code-->Override Methods-->Android.app.Acticity--> onOptionsItemSelected 선택

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

➰ LinearLayout base 선언해주기. onCreat 메소드 전에!! 써줘야 아래 메소드에서도 쓸 수 있음. 캐스팅은 onCreat안에.

➰ 위와 마찬가지로 return true; 아래로 끌어내려 써주기


package com.cookandroid.w10_menu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    LinearLayout base;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        base = (LinearLayout) findViewById(R.id.base);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater m = getMenuInflater();
        m.inflate(R.menu.menu1, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        super.onOptionsItemSelected(item);
        
        return true;
    }
}

🟢 switch 문으로 item 선택하기 🟢

package com.cookandroid.w10_menu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    LinearLayout base;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        base = (LinearLayout) findViewById(R.id.base);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater m = getMenuInflater();
        m.inflate(R.menu.menu1, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        super.onOptionsItemSelected(item);

        switch(item.getItemId()){
            case R.id.red:
                base.setBackgroundColor(Color.RED);
                break;
            case R.id.blue:
                base.setBackgroundColor(Color.BLUE);
                break;
            case R.id.yellow:
                base.setBackgroundColor(Color.YELLOW);
                break;
            case R.id.green:
                base.setBackgroundColor(Color.GREEN);
                break;
        }

        return true;
    }
}

switch 다시 해바바. 여기 추가

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        super.onOptionsItemSelected(item);
        
        return true;
    }
profile
알아가는 맛

0개의 댓글