12.2주차
메뉴와 대화상자
메뉴
- 옵션 메뉴 : 화면 오른쪽 위 메뉴 아이콘을 눌렀을 때, 화면에 나오는 메뉴, 목록이 많으면 스크롤 해서 사용
- 컨텍스트 메뉴 : 날짜를 롱클릭하면 나오며 제목과 함께 화면의 중앙에 출력된다.
옵션 메뉴를 사용하는 방법
메뉴 XML 파일 생성 후 Java에서 호출
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/baseLayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="오른쪽 위 메뉴를 누르세요."
android:textSize="20dp"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이건 버튼" />
</LinearLayout>
메뉴 XML 파일을 이용한 방식
-
메뉴 폴더 생성 및 메뉴 XML 파일 생성 -> 편집 -> res > new > Android Resource Directory > Directory Name : Menu 선택 -> Menu 폴더에 우클 > menu resource file > menu.xml 만들기
// menu.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 코딩 : onCreateOptionMenu() 메소드 오버라이딩(메뉴 파일 등록) -> 규칙이 정해져 있으므로 예시 코드 꼭 확인 -> Code > Override Methods 클릭 > android.app.Activity에서 onCreateOptinoMenu() 찾기 > OK 클릭 -> return 지우기 -> 형식 그대로 유지 필요
// MainActivity.java package com.cookandroid.project7_1; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.widget.Button; import android.widget.LinearLayout; 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); return true; } @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); } }
-
Java 코딩 : onOptionsItemSelected() 메소드 오버라이딩(메뉴 선택 시 작동할 내용 코딩) -> Code > Override Methods 클릭 > android.app.Activity에서 onOptionsItemSelected() 찾기 > OK 클릭 -> return 지우기 -> 코드 작성
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); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater mInflater = getMenuInflater(); mInflater.inflate(R.menu.menu, 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; }
-> 결과
컨텍스트 메뉴
레이아웃 또는 버튼, 에디트텍스트 등의 위벳을 롱클릭 했을 때 화면 중앙에 나타나며 Windows의 팝업창과 유사함
-> 메뉴 설정 순서는 메뉴 설정과 유사
-
메뉴 폴더 생성 및 위젯의 메뉴 XML 파일 생성 및 편집
-
Java 코딩 : onCreate 안에 registerForContextMenu() 로 등록
-
Java 코딩 : onCreateContextMenu() 메소드 오버라이딩
-
Java 코딩 : onContextItemSelected() 메소드 오버라이딩
토스트
화면에 잠깐 나타났다가 사라지는 메시지, 프로그래머가 디버깅 용도로 사용하기에도 적당함
Toast.makeText(Context context, String message, int duration).show();
-> duration: 화면에 나타나는 시간
자세한 코드는 실습을 직접하지는 않았으므로 12.2주차 ppt를 참고할 것
댓글남기기