1. 액션바 (ActionBar)

액션바는 액티비티의 스타일에 따라 자동으로 만들어진다.

디폴트 값은 액션바가 있는 스타일이지만, AndroidManifest.xml 안에 <activity> 태그를 추가할 때 다른 스타일을 지정할 수 있다.

액션바는 소스 코드에서 접근할 수 있으며 getActionBar, getSupportActionBar 메소드를 호출하면 참조할 수 있다.

show 메소드를 호출하면 액션바가 보이고 hide 메소드를 호출하면 액션바가 보이지 않게 된다.



2. 옵션메뉴 (OptionMenu)

옵선메뉴란, 액션바에 메뉴 버튼을 눌렀을 때 나타나는 메뉴를 말한다.

메뉴를 생성하려면 먼저 XML과 JAVA 소스코드를 통해 메뉴를 정의해야 한다.

/res/menu 폴더를 만들고 그 안에 XML 파일(메뉴 리소스  파일)을 넣으면 그 파일은 메뉴 파일로 인식된다.

메뉴를 위한 XML 파일에는 <menu> 태그를 넣을 수 있으며 그 안에 <item> 태그가 들어간다.



3. 실행 결과 화면

  



4. menu/menu_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!--
    showAsAction 메뉴는 안드로이드 SDK 에 포함된 속성이 아니라
    외부 라이브러리(appcompat-v7)에 포함된 속성이어서 android: 접두어가 아닌 app: 접두어를 붙인다.
    이 속성의 값을 always 로 하면 화면 상단의 타이틀 부분에 메뉴 아이콘이 항상 보이게 된다.
    다른 속성 값으로는 never (절대로 액션바에 표시하지 않음),
    ifRoom (표시할 수 있는 공간이 존재하면 표시),
    withText (메뉴의 아이콘과 텍스트를 같이 표시)가 있다.
    -->
    <item android:id="@+id/menu_refresh"
        android:title="새로고침"
        android:icon="@drawable/menu_refresh"
        app:showAsAction="always" />
 
    <item android:id="@+id/menu_search"
        android:title="검색"
        android:icon="@drawable/menu_search"
        app:showAsAction="always|withText"
        app:actionLayout="@layout/menu_search"/>
 
    <item android:id="@+id/menu_settings"
        android:title="설정"
        android:icon="@drawable/menu_settings"
        app:showAsAction="always" />
</menu>
cs



5. layout/menu_search.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="검색"
        android:textSize="18sp"
        android:textColor="@android:color/white"
        android:textStyle="bold"/>
 
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:backgroundTint="@android:color/white"/>
 
</LinearLayout>
 
cs



6. MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.tistory.qlyh8.pracitice;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity  {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // 액션바 숨기기
        //ActionBar actionBar = getSupportActionBar();
        //actionBar.hide();
    }
 
    // 자동 호출되는 메서드로,
    // R.menu.menu_main 을 인플레이션하여 객체로 만든 후 Menu 객체에 설정한다.
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    // 메뉴 선택 시, onOptionsItemSelected 메소드가 호출된다.
    // 이 때 MenuItem 객체를 파라미터로 전달받게 되며, 어떤 메뉴를 선택했는지를 id로 구분하여 처리할 수 있다.
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_refresh:
                Toast.makeText(getApplicationContext(), "새로고침 메뉴", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_search:
                Toast.makeText(getApplicationContext(), "검색 메뉴", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_settings:
                Toast.makeText(getApplicationContext(), "설정 메뉴", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
cs



7. 참고

- 메뉴: https://developer.android.com/guide/topics/ui/menus?hl=ko

- 앱 바 추가: https://developer.android.com/training/appbar/?hl=ko

- 지원 라이브러리: https://developer.android.com/topic/libraries/support-library/?hl=ko

- 지원 라이브러리 기능: https://developer.android.com/topic/libraries/support-library/features

- Menu Resource: https://developer.android.com/guide/topics/resources/menu-resource





출처: https://www.edwith.org/boostcourse-android/lecture/17076/

+ Recent posts