Menu

채현·2023년 2월 15일
0

안드로이드

목록 보기
6/37

🍔 Menu

xml에 item 만들때 title 필수 (기본적으로 overflow menu로 만들어짐)

ⓐ Option Menu

Action bar의 title 우측에 Menu Item을 놓을 수 있는 Menu영역 위

menu객체에 MenuItem을 객체를 추가

  1. java 언어로 추가 - 아이콘이나 id같은 식별자를 지정할때 번거로움 (메뉴가 많아질 수록 더욱더)
public boolean onCreateOptionsMenu(Menu menu) {

        menu.add("계정");
        menu.add("설정");
        return super.onCreateOptionsMenu(menu);
}
  1. XML언어로 menu를 설계하고 객체로 만들어서 사용
//menu폴더 안에 option.xml 문서를 읽어와서 Menu객체로 만들어주는(부풀려주는 inflate) 객체
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option, menu);

Inflater : xml을 객체로 만듦 - inflate()
운영체제의 기능으로 함부로 건들일 수 없음
Context (Android 대리인)의 기능 중 하나!
.getSystemService(기능종류) 명령으로 기능을 부를 수 있음
BUT MenuInflator 는 부를 수 없음
Activity에서 많이 쓰는 MenuInflator, Resource... 등을 부르는 메소드 : .getMenuInflator() , .getLayoutInflator() , getResource()...

title이 길어지는 것을 대비하여 app:showAsAction="ifRoom" (defalt는 never)

icon image asset --> alpha 값을 가짐 (0.8)
불투명하게 하고싶다면 값을 변경! (1.0)

ⓑ Context Menu

마우스 우클릭시 뜨는 메뉴처럼 길게 터치했을 경우
안드로이드에서 아이콘 사용하는 것을 권장하지않음

Activity에게 btn객체를 ContextMenu로 등록

registerForContextMenu(btn);

ContextMenu로 등록된 View를 길게 터치하면 ContextMenu를 만드는 메소드 자동 발동

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
//menu폴더 안 context.xml 파일을 읽어서 메뉴아이템 객체로 생성(infalte 부풀리다)
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context, menu);

        super.onCreateContextMenu(menu, v, menuInfo);
}

ⓒ Popup Menu

짧거나 길게 터치했을 경우 원하는 위치에 생성

//두번째 파라미터 : 메뉴가 보여질 뷰 (anchor 닻을 내릴 곳!)
PopupMenu popupMenu = new PopupMenu(MainActivity.this, btn);

🍟 기타 Menu

🥔 Search View

<item android:id="@+id/menu_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="ifRoom"/>

① SearchView 찾아오기

 MenuItem menuItem = menu.findItem(R.id.menu_search);
 searchView = (SearchView) menuItem.getActionView(); //SearchView로 형변환
//searchView = menuItem. 불가 view일때만 find~ 가능
//searchView = menuItem.getActionView(); view가 리턴값이므로  searchView로 받을 수 없음

② searchView에 적용

searchView.setQueryHint("이름을 입력하세요");

③ SearchView에 글씨 변화에 반응하는 리스너

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) { //소프트키보드의 [돋보기버튼]을 터치했을때(검색어입력 완료) 실행되는 콜백메소드
                Toast.makeText(MainActivity.this, "검색어 : " + query, Toast.LENGTH_SHORT).show();
                return false;
            }
            @Override
            public boolean onQueryTextChange(String newText) { //글씨가 변경될때마다 실행되는 콜백메소드
                return false;
            }
});

return super.onCreateOptionsMenu(menu);

🥔 Action View

android:imeOptions="actionSearch" --> 소프트키보드의 작서완료버튼 변경

🥔 Action Mode

0개의 댓글