OptionMenu 구분선 넣기

devvace ㅣ 2018. 11. 22. 16:47

구분선 넣는 방법이 다양하게 있으나, 생각보다 찾는데 시간이 많이 걸려서 여기에 정리해놓음

※ 이 방법으로 하면 메뉴하나하나 마다 밑줄 배경을 적용 하는 방식이기 때문에, 맨 밑 메뉴에 밑줄을 넣어도 상관없을 때 적용



1. OptionMenu 사용하기

 (1) Menu resource 생성

Android Studio의 프로젝트에서 res 폴더 우클릭을 하고 new → Android Resource Directory를 선택해서 menu 폴더를 생성

생성한 menu 폴더를 우클릭해서 new → Menu resource file을 선택해서 menu_main.xml 파일을 생성(파일 이름은 아무거나 상관없음)


 (2) menu_main.xml 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item
        android:id="@+id/menu_1"
        android:orderInCategory="100"
        android:title="Menu 1" />
 
    <item
        android:id="@+id/menu_2"
        android:orderInCategory="100"
        android:title="Menu 2" />
 
</menu>
cs


 (3) 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
...
    // 메뉴 생성
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return true;
    }
 
    // 메뉴 버튼 선택했을 때 이벤트 함수
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case R.id.menu_1:
                Toast.makeText(getApplicationContext(), "Menu 1!", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.menu_2:
                Toast.makeText(getApplicationContext(), "Menu 2!", Toast.LENGTH_SHORT).show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
...
cs


2-1. 메뉴마다 구분선 넣기()

 (1) style.xml 파일 수정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
 
        <!-- dropDownListViewStyle 추가 --> 
        <item name="android:dropDownListViewStyle">@style/popup</item>
    </style>
 
    <!-- popup style 추가 --> 
    <style name="popup" parent="Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">@color/colorPrimary</item>
        <item name="android:dividerHeight">1dp</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:itemBackground">@android:color/white</item>
    </style>
</resources>
cs

- 이 경우 중간 중간에 구분선이 들어감


2-2. 메뉴마다 구분선 넣기()

 (1) 메뉴 배경 리소스 파일 생성

res\drawable 폴더 우클릭 new → Drawable resource file을 선택해서 view_line.xml 생성(파일 이름 아무거나 상관없음)


 (2) 리소스 파일 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#F4F4F4" />
        </shape>
    </item>
 
    <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="#EAEAEA" />
        </shape>
    </item>
</layer-list>
cs


 (3) styles.xml 파일 수정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<resources>
 
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
 
        <!-- 추가 -->
        <item name="android:itemBackground">@drawable/view_line</item>
    </style>
 
</resources>
cs

- 이 경우 메뉴 맨 밑에 마다 구분선이 들어감