- 툴바
- 사용자가 할 수 있는 액션을 포함하며, 디자인의 일관성을 제공
- 명칭 : 롤리팝 부터 툴바 등장, 롤리팝 이전에는 액션 바.
- 툴바가 더 유연한 사용자 인터페이스를 제공함.
- AppCompat 라이브러리의 툴바를 사용하면 API 7까지 커버가 가능하다.
- 툴바 안에 일반 뷰(ImageView, TextView 등을 적적할게 추가하여 사용할 수 있다.
- 하지만 기본적으로 들어가 있는 패딩과 마진이 있기 때문에 사용할때 주의해야 한다.(툴바를 적용시키고 백그라운드 색을 확 티나게 적용하였을 경우 확인 할 수 있다.)
- 툴바 VS 액션바
- 툴바의 시각적인 디자인이 변경된 것이 가장 큰 차이점.
- 액션바는 제약을 많이 갖고 있고, 항상 화면의 위에 나타나야 하며, 하나만 둘 수 있다.
- 액션바는 크기가 정해져 있어 변경될 수 없다.
- 툴바를 직접 포함시키는게 가능하고 원하는 곳에 위치시킬 수 있으며, 여러개가 포함 가능.
- 내부에 뷰를 둘 수 있고, 높이 조절도 가능하다.
- 툴바에 메뉴 추가하기
- res -> New -> Android resource file -> Resource type 을 menu로 변경 후 파일 생성
- <item> 태그 추가 후 속성에 showAsAction 속성 부여
- showAsAction : 액션 항목이 툴바에 나타날 것인지, 아니면 오버 플로 메뉴에 나올것인지를 나타낸다.
- ifRoom|withText 이렇게 값을 주면, 툴바에 공간이 있다면 액션항목의 아이콘과 텍스트가 모두 툴바에 나타난다. 만일 아이콘을 보여줄 공간은 있지만 텍스트의 공간은 없다면 아이콘만 나타난다. 또한 둘다 보여줄 공간이 없다면 오버플로 메뉴에 들어간다.
- 기타 옵션
- always : 사용은 권장하지 않음, ifRoom을 사용해서 안드로이드 OS가 결정하게 하는 것이 좋음.
- never : 자주 사용하지 않는 액션의 경우 never로 지정해서 오버플로에 두는 것이 좋다.
- 사용 예
- 메뉴를 가지고 있다는 것을 명시적으로 알려야 한다.
@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_crime, menu);}
- 메뉴 선택 리스너
@Overridepublic boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_delete_crime: //처리 return true; default: return super.onOptionsItemSelected(item); } }
- 툴바에 계층적 내비게이션 활성화하기
- 매니페스트 파일에 parentActivityName 속성을 추가하여 계층적 내비게이션을 활성화 할 수 있다.
- android:parentActivityName=".MainActivity"
- 물리적인 back버튼과 이렇게 추가한 up버튼을 동일한 화면으로 돌아가나, 내부적으로는 다르게 처리된다.
- up버튼으로 이동 되었을때는 부모 액티비티는 완전히 새로 재생성. 즉 모든 액티비티 인스턴스 변수의 값이 유실된다.
- 내부적인 로직의 예
Intent intent = new Intent(this,CrimeListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
- 툴바에 서브타이틀 적용하기
private void updateSubtitle(){
CrimeLab crimeLab = CrimeLab.getInstance(getActivity());
int crimeCount = crimeLab.getCrimes().size();
String subtitle = getString(R.string.subtitle_format, crimeCount);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.getSupportActionBar().setSubtitle(subtitle);
}
댓글
댓글 쓰기