본문 바로가기

Android/Basic

[Android] Action Bar


1. 액션바 옵션메뉴 추가하기




(1) res 디렉토리에 'menu' 디렉토리 생성. * 이름은 꼭 menu로 해야 메뉴 레이아웃 생성 가능.


(2) menu 디렉토리에 menu_main.xml 파일 생성.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_refresh"
android:title="새로고침"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"/>
<item
android:id="@+id/menu_search"
android:title="검색"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"/>
<item
android:id="@+id/menu_settings"
android:title="설정"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"/>
</menu>


(3) 메인 액티비티에 onCreateOptionsMenu() 메소드 오버라이드.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}


(4) 옵션 메뉴 클릭 이벤트 처리

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 메뉴아이템 클릭시 호출, 파라미터는 선택된 메뉴아이템
int curId = item.getItemId();
switch (curId) {
case R.id.menu_refresh:
Toast.makeText(this, "새로고침 메뉴 클릭됨.", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_search:
Toast.makeText(this, "검색 메뉴 클릭됨.", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_settings:
Toast.makeText(this, "설정 메뉴 클릭됨.", Toast.LENGTH_SHORT).show();
break;
default:
break;
}

return super.onOptionsItemSelected(item);
}



2. 액션바에 custom action view 추가하기.


(1) 추가할 옵션 레이아웃 만들기. (search_layout.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="검색"
android:textColor="#ffad8745"
android:textSize="16sp" />

<EditText
android:id="@+id/editText"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp" />
</LinearLayout>


 (2) menu_main.xml 변경

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_refresh"
android:title="새로고침"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"/>
<item
android:id="@+id/menu_search"
android:title="검색"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"
app:actionLayout="@layout/search_layout"/>
<item
android:id="@+id/menu_settings"
android:title="설정"
android:icon="@mipmap/ic_launcher"
app:showAsAction="always"/>
</menu>



3. 액션바 없애기

- 첫번째 방법 : manifest.xml theme : AppTheme -> styles.xml 에서 바꾸기

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

</resources>


- 두번째 방법 : 메인액티비티 onCreate() 메소드에서 없애기

ActionBar actionBar = getSupportActionBar();
actionBar.hide();




+ 추가

android: 접두어는 android SDK에 포함된 속성에 붙여주는 것이고, app: 접두어는 외부 라이브러리(appcompat-v7)에 포함된 속성에 붙이는 것이다.


출처 : 부스트코스 강의