xml에 item 만들때 title 필수 (기본적으로 overflow menu로 만들어짐)
Action bar의 title 우측에 Menu Item을 놓을 수 있는 Menu영역 위
menu객체에 MenuItem을 객체를 추가
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("계정");
menu.add("설정");
return super.onCreateOptionsMenu(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)
마우스 우클릭시 뜨는 메뉴처럼 길게 터치했을 경우
안드로이드에서 아이콘 사용하는 것을 권장하지않음
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);
}
짧거나 길게 터치했을 경우 원하는 위치에 생성
//두번째 파라미터 : 메뉴가 보여질 뷰 (anchor 닻을 내릴 곳!)
PopupMenu popupMenu = new PopupMenu(MainActivity.this, btn);
🥔 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