메뉴
사용자가 여러 개 중 하나를 선택하도록 하여 사용자의 명령을 받아들이는 간편한 방식.
안드로이드메뉴 종류 : 옵션메뉴, 컨텍스트 메뉴
종류별로 xml과 함께이용하거나 xml없이 자바코드만으로도 만들 수 있다
옵션메뉴 : xml이용
키패드의 메뉴 버튼을 누를때 나타난다
작성 순서
res
에 menu폴더와 menu1.xml파일 생성 후 메뉴 코딩
자바코딩 : onCreateOptionMenu()메소드 오버라이딩
자바코딩 : onOptionItemSelected() 메소드 오버라이딩
컨텍스트 메뉴 : xml이용
위젯을 롱클릭했을때 화면 중앙에 나타난다.
windows 팝업창과 비슷
작성순서
res
에 menu폴더와 menu1.xml파일 생성 후 메뉴 코딩
자바코딩 : onCreate()안에 registerForContextMenu()로 위젯등록
자바코딩 : onCreateContextMenu()메소드 오버라이딩
위젯별로 별도의 파일을 만들어야한다.
if문을 통해 위젯별 컨텍스트 메뉴를 등록해야한다.
자바코딩 : onContextItemSelected() 메소드 오버라이딩
activity_main.xml
코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <menu xmlns:android ="http://schemas.android.com/apk/res/android" > <item android:id ="@+id/itemRed" android:title ="빨간 배경" > </item > <item android:id ="@+id/itemBlue" android:title ="파란 배경" > </item > <item android:id ="@+id/itemRGreen" android:title ="초록 배경" > </item > <item android:id ="@+id/itemOrig" android:title ="배경 초기화" > </item > </menu >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <menu xmlns:android ="http://schemas.android.com/apk/res/android" > <item android:id ="@+id/subRotate" android:title ="버튼 90도 회전" > </item > <item android:id ="@+id/subSize" android:title ="버튼 3배로 확대" > </item > <item android:id ="@+id/subSize2" android:title ="버튼 원래대로" > </item > </menu >
MainActivity.java
자바코딩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 @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); button2 = (Button) findViewById(R.id.button2); registerForContextMenu(button1); registerForContextMenu(button2); } @Override public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super .onCreateContextMenu(menu, v, menuInfo); MenuInflater mi = getMenuInflater(); if (v == button1){ menu.setHeaderTitle("배경색 변경" ); mi.inflate(R.menu.menu1, menu); } if (v == button2){ mi.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.itemBlue: baseLayout.setBackgroundColor(Color.BLUE); return true ; case R.id.itemRGreen: baseLayout.setBackgroundColor(Color.GREEN); return true ; case R.id.itemOrig: baseLayout.setBackgroundColor(Color.TRANSPARENT); return true ; case R.id.subRotate: button2.setRotation(90 ); return true ; case R.id.subSize: button2.setScaleX(3 ); return true ; case R.id.subSize2: button2.setScaleX(1 ); button2.setRotation(0 ); return true ; } return false ; }
인플레이터(Inflater)
인플레이터는 자전거 등의 공기 펌프라는 뜻으로 풍선에 바람을 넣어서 실제 객체를 만들어 사용한다는 의미이다. 정적으로 존재하는 xml을 java코드에서 가져와서 실제 객체로 만들어 사용하는 것이다. 메뉴 인플레이터 : 메뉴xml파일을 java코드에 가져와 사용하는 것 레이아웃 인플레이터 : 레이아웃xml을 java코드에 가져와 사용하는 것 출처 : Android Studio를 활용한 안드로이드 프로그래밍 5판 p287
토스트
화면에 잠깐 나타났다가 사라지는 메시지
기본적인 사용형태1 Toast.makeText(Context context, String message, int duratioin).show();
duratioin 속성 : LENGTH_SHORT와 LENGTH_LONG 둘 중 하나를 사용
setGravity(int gravity, int xOffset, int yOffset) 메서드
gravity 선택값 : TOP, LEFT, RIGTH, BOTTOM, CENTER
Offset은 떨어진 거리를 나타냄
activity_main.xml
코드 작성
toast2.xml
생성 및 코드 작성1 2 3 4 5 6 7 8 9 <LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="match_parent" android:layout_height ="match_parent" > <ImageView android:src ="@drawable/oreo" android:layout_width ="wrap_content" android:layout_height ="100dp" /> </LinearLayout >
MainActivity.java
자바코딩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("사용자 정보 입력" ); tvName = (TextView) findViewById(R.id.tvName); tvEmail = (TextView) findViewById(R.id.tvEmail); btn1 = (Button) findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick (View v) { dlgV = (View) View.inflate(MainActivity.this , R.layout.dialog, null ); AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this ); dlg.setTitle("사용자 정보 입력" ); dlg.setIcon(R.drawable.ic_menu_allfriends); dlg.setView(dlgV); dlg.setPositiveButton("확인" , new DialogInterface.OnClickListener() { @Override public void onClick (DialogInterface dialog, int which) { dlgEdtName = (EditText) dlgV.findViewById(R.id.dlgEdt1); dlgEdtEmail = (EditText) dlgV.findViewById(R.id.dlgEdt2); tvName.setText(dlgEdtName.getText().toString()); tvEmail.setText(dlgEdtEmail.getText().toString()); } }); dlg.setNegativeButton("취소" , new DialogInterface.OnClickListener() { @Override public void onClick (DialogInterface dialog, int which) { Toast toast = new Toast(MainActivity.this ); toastV = (View) View.inflate(MainActivity.this , R.layout.toast1, null ); toastText = (TextView) toastV.findViewById(R.id.toastText1); toastText.setText("취소했습니다" ); toast.setView(toastV); toast.show(); } }); dlg.show(); } }); }