본문 바로가기

안드로이드

[안드로이드] 간단한 메뉴버튼 만들기

728x90

점 3개 메뉴를 누르면

 

이렇게 옵션 메뉴가 열리는 방법을 알아보겠습니다.

 

서브 메뉴까지 생성 가능합니다.

 

# 개요

- 기능

  • 메인 화면 바탕색 변경
  • 버튼 회전, 크기 변경

 

- 작성 파일

  • activity_main.xml  :  메인 화면
  • menu1.xml  :  옵션 메뉴 
  • MainActivity.java  : 프로그램 구현 

 

 

# activity_main.xml

메인 화면을 구성합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/baseLayout"	// 바탕색이 변경될 레이아웃의 id
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="20dp"
        android:text="점3개 메뉴를 누르세요"
        android:textSize="20dp"
        />

    <Button
        android:id="@+id/button1"	// 회전하고 사이즈가 변경될 버튼의 id
        android:text="Button"
        android:layout_margin="20dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

 

 

 

# menu1.xml

3개의 메뉴, 1개의 서브 메뉴 버튼이 보입니다.
서브 메뉴버튼을 누르면 서브메뉴들이 보입니다.

- menu1.xml 생성

처음 프로젝트를 생성하면 menu.xml 파일이 없습니다.

  1. Project Tree / App / res 우클릭 / New / Android Resource Directory 선택
  2. Resource type 을 menu 로 변경 한 후 OK
  3. 생성된 Project Tree / App / res / menu 우클릭 / New / Menu Resource File 선택
  4. 원하는 파일명을 입력하고 OK (여기서는 menu1 을 사용합니다.)
  5. menu1.xml 파일이 생성됩니다.

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item				// 옵션메뉴 1
        android:id="@+id/itemRed"	// 배경색을 빨간색으로 바꾸게 할 버튼 id
        android:title="배경색 빨간색"	// 메뉴에 표시될 문구
        />

    <item				// 옵션메뉴 2
        android:id="@+id/itemGreen"
        android:title="배경색 초록색"
        />

    <item				// 옵션메뉴 3
        android:id="@+id/itemBlue"
        android:title="배경색 파란색"
        />

    <item android:title="버튼 변경 >> ">	// 서브 메뉴로 진입할 메뉴에 표시될 문구
        <menu>				// 서브메뉴인 아이템들을 그룹으로 감싸줍니다.
            <item			// 서브 메뉴
                android:id="@+id/subRoate"
                android:title="45회전"
                />
            <item
                android:id="@+id/subSize"
                android:title="2배확대"
                />
        </menu>
    </item>

</menu>

 

 

 

# MainActivity.java

package com.siku314.obtionmenu;

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.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    LinearLayout baseLayout;	// 메인화면의 기본 레이아웃을 담는 변수
    Button button1;		// 메인화면의 버튼을 담는 변수

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

        setTitle("메뉴버튼 만들기");

        // activity.xml 에서 작성한 Layout의 id를 참조하여 가져옵니다.
        baseLayout = findViewById(R.id.baseLayout);
        
        // activity.xml 에서 작성한 Button의 id를 참조하여 가져옵니다.
        button1 = findViewById(R.id.button1);
    }
	
    // Ctrl + o (Override Methods...) 에서 함수명으로 검색 및 추가합니다.
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        
        // java에서 menu xml파일을 가져오기 위해 사용합니다.
        MenuInflater mInflater = getMenuInflater();
        
        // menu1.xml의 파일명을 사용합니다.
        mInflater.inflate(R.menu.menu1, menu);
        return true;
    }
	
    // Ctrl + o (Override Methods...) 에서 함수명으로 검색 및 추가합니다.
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        
        // menu1.xml에서 작성한 item의 id를 사용합니다.
        switch(item.getItemId()){
            case R.id.itemRed:
                baseLayout.setBackgroundColor(Color.RED);
                return true;
            case R.id.itemGreen:
                baseLayout.setBackgroundColor(Color.GREEN);
                return true;
            case R.id.itemBlue:
                baseLayout.setBackgroundColor(Color.BLUE);
                return true;
            case R.id.subRoate:
                button1.setRotation(45);
                return true;
            case R.id.subSize:
                button1.setScaleX(2);
                return true;
        }
        return false;
    }
}

 

# Run 'app'

옵션 메뉴를 차례대로 선택한 결과입니다.
서브 옵션 메뉴를 차례대로 선택한 결과입니다.

728x90