타이틀바, 액션바, 툴바.. 뭐 이런 저런 명칭이 많은 곳.
용어 정리는 다음에 한번 차이에 대해서 정리를 해야겠지만,
현재 나는 이 타이틀 바에 버튼을 넣어서 액션바로서 사용을 하고싶으니,
추가하는 방법을 서술 하도록하겠다.
처음 프로젝트를 만들어서 basic으로 시작을 하게 된다면
아무것도 없는 화면에 위에 보면 'Title' 이 적혀 있는 이 부분이 타이틀 바이다.
이 상태에서 옆에 버튼을 추가 해서 액션바(?)로 사용을 하고 싶다면,
먼저, menu 폴더를 생성하고 menu.xml을 생성을 해준다.
( 아무 것도 없는 기본 빈창을 했다면 menu가 없을 것이다.)
그리고 그 안에 내용을 추가하는데
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_btn1"
android:title="버튼1"
app:showAsAction="always" />
<item android:id="@+id/action_btn2"
android:title="버튼2"
app:showAsAction="never" />
<item android:id="@+id/action_btn3"
android:text="action_btn3"
android:title="버튼3"
app:showAsAction="collapseActionView" />
<item android:id="@+id/action_btn4"
android:title="버튼4"
app:showAsAction="ifRoom"/>
<item android:id="@+id/action_btn5"
android:title="버튼5"
app:showAsAction="withText"/>
</menu>
이라고 추가를 하면 된다.
원하는 수 만큼 item을 추가하고, 표출 되는 방식은
app:showAsAction=""
에서 "" 사이에 alway, never, ifRoom, withText, collapseActionView 이 있으며 이 차이는
alway |
아이템을 항상(always) 타이틀 바에 표시 됨. never와 ifRoom보다 우선되며, 공간이 없으면 표시되지 않음. |
never |
아이템을 액션바의 액션으로 표시하지 않고(never) 오버플로우 메뉴에 바로 표시. |
ifRoom |
만약 공간이 있다면(ifRoom)의 액션으로 표시하고, 공간이 없다면 오버플로우 메뉴에 표시. |
withText |
아이템을 액션으로 표시할 때 텍스트와 같이(withText) 표시. 단, 아이콘과 텍스트를 같이 표시할 공간이 있는 경우에만 텍스트 표시. |
collapseActionView |
아이템에 커스텀 액션 뷰가 지정된 경우, 축소된 형태로 표시. |
정도의 차이인데 본인이 원하는 방식으로 고르면 되겠다.
menu를 추가 했다면, 그 다음엔 java라면 .java파일에, kotlin이라면 .kt에 다음을 추가한다.
JAVA
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu, menu)
return true
}
그러고 난뒤 화면을 확인해 본다면, 화면에 버튼이 추가 된것을 확인이 가능하다.
그리고 이를 사용하려면 클릭 이벤트도 추가를 해줘야하는데,
이건 방금 쓴 파일에서 그대로 이어 붙여서
JAVA
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_btn1:
playBtn();
return true;
case R.id.action_btn2:
stopBtn();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle presses on the action bar items
when(item.itemId){
R.id.action_btn1 -> { return palyBtn() }
R.id.action_btn2 -> { return stopBtn() }
else -> {return super.onOptionsItemSelected(item)}
}
}
식으로 형식을 잡아서 만들면 된다.