1. 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:id="@+id/baseLayout"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="오른쪽 위 메뉴 버튼을 누르시오"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/button1"
android:text="이건 버튼"/>
</LinearLayout>
- menu1.xml
<?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>
- Java 코드
package com.cookandroid.project7_1;
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("배경색 바꾸기");
baseLayout = (LinearLayout) findViewById(R.id.baseLayout);
button1 = (Button) findViewById(R.id.button1);
}
//옵션 메뉴 등록
//인플레이터 : XML 파일을 Java 코드에 가져와 사용
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater mInflater = getMenuInflater();
//menu1.xml 등록
mInflater.inflate(R.menu.menu1, menu);
return true;
}
//메뉴 클릭 시 동작하는 메소드
@Override
public boolean onOptionsItemSelected(@NonNull 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;
}
}
2. XML을 이용한 컨텍스트 메뉴 - 배경색 변경 및 버튼 변경 앱 만들기 실습
: 레이아웃 또는 버튼, 에디트텍스트 등의 위젯을 롱클릭(꾹 누르고 있다 떼기)했을 대 화면 중앙에 나타남. Windows의 팝업 창과 비슷
: 여러 개의 위젯 메뉴 설정 가능
- 화면 디자인
<?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:id="@+id/baseLayout"
android:orientation="vertical"
android:gravity="center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:text="배경색 변경"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="버튼 변경"/>
</LinearLayout>
- menu1.xml
<?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>
</menu>
- menu2.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/subRotate"
android:title="버튼 45도 회전"/>
<item
android:id="@+id/subSize"
android:title="버튼 2배 확대"/>
</menu>
- Java 코드
package com.cookandroid.project7_1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
LinearLayout baseLayout;
Button button1, button2;
@Override
protected 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);
registerForContextMenu(button1);
//버튼을 컨텍스트 메뉴로 등록
button2 = (Button) findViewById(R.id.button2);
registerForContextMenu(button2);
}
//컨텍스트 메뉴 등록 메소드
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater mInflater = getMenuInflater();
if (v == button1) {
menu.setHeaderTitle("배경색 변경");
mInflater.inflate(R.menu.menu1, menu);
}
if (v == button2) {
mInflater.inflate(R.menu.menu2, menu);
}
}
//버튼 롱클릭 후 컨텍스트 메뉴 클릭 시 동작
@Override
public boolean onContextItemSelected(@NonNull 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:
button2.setRotation(45);
return true;
case R.id.subSize:
button2.setScaleX(2);
return true;
}
return false;
}
}
'Android > 5. 메뉴와 대화상자' 카테고리의 다른 글
Day 112 : 사용자 정보 입력 앱 만들기 (0) | 2022.03.30 |
---|---|
Day 112 : 대화상자(Dialog) (0) | 2022.03.30 |
Day 112 : 토스트(Toast) (0) | 2022.03.30 |