본문 바로가기

애니리뷰

실습 7-1)메뉴를 이용해 배경색을 바꾸기

package com.example.helloandroid;

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;

import androidx.appcompat.app.AppCompatActivity;

@SuppressWarnings("deprecation")

//java코드만을 이용해 액션바 구성하기
public class MainActivity extends AppCompatActivity{
LinearLayout baseLayout;
Button button1;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater mInflater = getMenuInflater();
mInflater.inflate(R.menu.menu, menu);
//super, return: 상위 클래스의 생성자를 실행
//MenuInflater, mInflater: 메뉴 인플레이터 생성, 앞에서 작성한 메뉴xml파일을 등록

return true;
}

//메뉴를 클릭할 때 동작할 메소드 onOptionsItemSelected()를 코딩
//커서를 onCreate()밖에 두고, onOptionsItemSelcted를 자동완성 후 스위치문을 사용
@Override
public boolean onOptionsItemSelected(MenuItem item){
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.subRotate:
button1.setRotation(45);
return true;
case R.id.subSize:
button1.setScaleX(2);
return true;
}
return false; //자동완성된 return문을 false
}

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("배경색 바꾸기");

baseLayout=(LinearLayout)findViewById(R.id.baseLayout);
button1=(Button)findViewById(R.id.button1);


//옵션 메뉴를 등록하는 메소드 onCreateOptionsMenu()를 부모 클래스인
//activity클래스로부터 오버라이딩한다.
//code메뉴의 android.app.activity 하위의 메소드를 선택
}
}

/////////////////////////////

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

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/baseLayout"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="오른쪽 위 메뉴 버튼을 누르세요"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:text="이건 버튼"/>
</LinearLayout>
<!--메뉴 폴더가 없다면, 생성해야 한다.
app-res에서 new-android Resource Directory를 선택
이 창에서 resource type으로 'menu'를 선택-->

////////////////////////////////

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

<item
android:id="@+id/itemRed"
android:title="배경색(빨강)"></item>

<item
android:id="@+id/itemGreen"
android:title="배경색(초록)"></item>

<item
android:id="@+id/itemBlue"
android:title="배경색(파랑)"></item>

<item
android:title="버튼 변경 >> ">
<menu>
<item
android:id="@+id/subRotate"
android:title="버튼 45도 회전"/>
<item
android:id="@+id/subSize"
android:title="버튼 2배 확대"/>
</menu>
</item>
</menu>

//메뉴의 xml파일

 

///////////////////////////////

mainActivity.xml을 쓰지 않고, java만을 이용해 옵션 메뉴 구성하기

onCreateOptionsMenu() 메소드 안에서 xml파일에 접근하는 방법이 아닌,

직접 menu.add()메소드로 메뉴 항목을 추가하는 것

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    super.onCreateOptionsMenu(menu);

   

//두번째로 지정한 항목들은 onOptionsItemSelected()의 case문과 같으면된다. 즉, case 1, 2 등으로 연결됨

    menu.add(0, 1, 0, "배경색(빨강)");

    menu.add(0, 2, 0, "배경색(초록)");

    menu.add(0, 3, 0, "배경색(파랑)");

 

//서브메뉴 클래스를 이용, 서브메뉴를 만들어 그 항목을 추가

    SubMenu sMenu = menu.addSubMenu("버튼 변경 >>");

    sMenu.add(0, 4, 0, "버튼 45도 회전");

    sMenu.add(0, 5, 0, "버튼 2배 확대");

 

    return true;

}

 

@Override

public boolean onOptionsItemSelected(MenuItem item) {

    swtich(item.getItemId())

    case 1:

       baseLayout.setBackgroundColor(Color.RED):

       return true;

///이하 같음