728x90
메뉴의 종류
- 옵션 메뉴 : 사용자가 옵션 MENU 키를 누를 때 나타남
- 컨텍스트 메뉴 : 사용자가 화면을 일정 시간 이상으로 길게 누르면 나타나는 메뉴
각 메뉴 아이템에 대한 속성
- Id
- Icon
- Title
- showAsAction : 정의 유무에 따라 메뉴 아이템 표시 여부
메뉴 팽창 (inflate)
- 메뉴 리소스를 팽창(inflate)하면 실제 메뉴가 생성
- Java 코딩 : onCreateOptionMenu() 메소드 오버라이딩 → 메뉴 파일 등록
- Java 코딩 : onOptionslitemSelected() 메소드 오버라이딩 → 메뉴 선택 시 작동할 내용 코딩
// onCreateOptionMenu() 메소드 기본 형식
public boolean onCreateOptionMenu(Menu menu) {
...
MenuInflater minflater = getMenuInflater();
minflater.inflate(R.menu.(menuXMLid), menu);
return true;
}
// onOptionsItemSelected() 메소드 기본 형식
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.항목id:
// 항목1을 선택했을 때 실행할 코드
break;
case R.id.항목id:
// 항목2를 선택했을 때 실행할 코드
break;
}
}
옵션 메뉴
- 한 화면에 하나이고 화면의 모든 위젯의 처리 방법 정의
- 현재 액티비티와 관련된 동작에 필요한 메뉴를 보여줌
- 옵션 버튼을 누르면 작동
실습
- 항목 1 : 이미지뷰 배경색을 빨간색으로 변경
- 항목 2 : 이미지뷰 배경색을 노란색으로 변경
- 항목 3 : 이미지뷰 배경색을 파란색으로 변경
- 항목 4 : 버튼을 회전
/*
1. button, Linearlayout, Image view 생성
2. menu 폴더 생성, menu xml 파일 생성 & 코딩
3. Java 코딩 : onCreate()안 위젯 연결
4. Java 코딩 : onCreateOptionMenu() 메소드 오버라이딩
5. Java 코딩 : onOptionItemSelected() 메소드 오버라이딩
*/
//Java 코드
public class MainActivity extends AppCompatActivity {
//변수 할당
Button mybtn;
LinearLayout mylinearlayout;
float angle = (float) 0.0;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// inflator를 onCreateOptions menu에서 사용 시 menu가 inflate 되어 사용 가능 상태로 변경
MenuInflater mlnflator = getMenuInflater();
mlnflator.inflate(R.menu.optionmenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()) {
case R.id.menu1:
mylinearlayout.setBackgroundColor(Color.RED);
break;
case R.id.menu2:
mylinearlayout.setBackgroundColor((Color.YELLOW));
break;
case R.id.menu3:
mylinearlayout.setBackgroundColor((Color.BLUE));
break;
case R.id.menu4:
angle += (float) 10.0;
mybtn.setRotation(angle);
break;
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 위젯 연결
mybtn = (Button)findViewById(R.id.button);
mylinearlayout = (LinearLayout) findViewById(R.id.linearlayout01);
}
}
컨텍스트 메뉴
- 플로팅 컨텍스트 메뉴 : 사용자가 항목 위에 오래 누르기를 하면 메뉴가 대화 상자처럼 떠서 표시
- 컨텍스트 액션 모드 : 현재 선택된 항목에 관련된 메뉴가 액션바에 표시
- 컨텍스트 메뉴가 나오게 할 위젯마다 별도의 파일로 만들어야 함
실습
Button 위젯 메뉴
- 항목 1 : Button의 배경색을 빨간색으로
- 항목 2 : Button의 배경색을 노란색으로
- 항목 3 : Button의 배경색을 파란색으로
ImageView 위젯 메뉴 - 항목 1 : Image View의 scaletype을 center로
- 항목 2 : Image View의 scaletype을 start로
- 항목 3 : Image View의 scaletype을 fitXY로
/*
1. button, Image view 생성
2. menu 폴더 생성, menu xml 파일(ImageView, Button) 생성 & 코딩
3. Java 코딩 : onCreate()안 registerForContexMenu()로 위젯 등록
4. Java 코딩 : onCreateContextMenu() 메소드 오버라이딩
5. Java 코딩 : onCreateItemSelected() 메소드 오버라이딩
*/
//Java 코드
public class MainActivity extends AppCompatActivity {
//변수 선언
Button mybtn;
ImageView myimage;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater minflator = getMenuInflater();
// if 문을 사용하여 각각의 메뉴 파일 등록
if( v == mybtn){
minflator.inflate(R.menu.contextmenu, menu);
}
else if(v== myimage) {
minflator.inflate(R.menu.imagemenu, menu);
}
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
super.onContextItemSelected(item);
switch (item.getItemId()){
case R.id.btn1:
mybtn.setBackgroundColor(Color.RED);
break;
case R.id.btn2:
mybtn.setBackgroundColor(Color.YELLOW);
break;
case R.id.btn3:
mybtn.setBackgroundColor(Color.BLUE);
case R.id.img1:
myimage.setScaleType(ImageView.ScaleType.CENTER);
break;
case R.id.img2:
myimage.setScaleType(ImageView.ScaleType.FIT_START);
break;
case R.id.img3:
myimage.setScaleType(ImageView.ScaleType.FIT_XY);
break;
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mybtn = (Button) findViewById(R.id.button); // 위젯 등록
registerForContextMenu(mybtn); // mybtn에는 context menu가 정의되어 있다는 의미
myimage = (ImageView) findViewById(R.id.imageView);
registerForContextMenu(myimage);
}
}
728x90
'Android Programming' 카테고리의 다른 글
[Mobile Programming] Android에서의 그래픽 (0) | 2021.10.21 |
---|---|
[Mobile Programming] 대화상자 (0) | 2021.10.19 |
[Mobile Programming] 터치 이벤트 (0) | 2021.10.18 |
[Mobile Programming] 이벤트 처리 실습 (0) | 2021.10.17 |
[Android Programming] 사용자 인터페이스 : 레이아웃 (0) | 2021.10.15 |