안드로이드/프로그래밍

[안드로이드]메모장 어플 개발 #4[Option Menu 및 Option Menu 홈키연결]

RBWSN 2015. 3. 7. 07:21
728x90
오늘은 먼저 옵션메뉴를 먼저 보겠다.

옵션메뉴는 컨텍스트의 상단에 위치한 메뉴들을 사용하는것을 보여줄껀데 일단 공유와 메뉴추가 방법을 보도록 할것이다.


일단 저부분들의 추가와 공유방법을 알아보자
공유란 내가 적은 파일을 다른 어플리케이션으로 보내는것인데 실제 앱에서 사용하게되면 카카오톡 메세지 등등을 보낼수있다.

먼저 처음의 안드로이드 그림이 있는 부분을 클릭하면 다른 행동을 취할수 있는 것을 해볼것이다.

보통은 카카오톡이나 다른 어플을봐도 저버튼을 클릭하면 초기화면 또는 전화면으로 넘어갈 수있는 코드를 사용하는데 개발시에는 저버튼이 막혀있어서 수동으로 설정을 해줘야한다.

저버튼을 사용하기위해서는 메인 onCreate에 

1
2
        getActionBar().setHomeButtonEnabled(true);
 
cs


이 코드를 추가하면 이제 사용을 할 수 있다.

이제 저버튼을 클릭할 수 있으므로 버튼클릭시 나는 전화면으로 돌아가는 것을 구현을했다.
저 버튼의 ID는 버튼클릭의 구현은 onOptionsItemSelected에서 item의 아이디와 연결을 하여 사용을한다.
저 안드로이드의 버튼은 안드로이드에서 벌써 지정되어있으므로 다른설정이 필요없이 사용하면된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        switch(item.getItemId()){
        case android.R.id.home:
            Intent intent = new Intent(this, MemoMenu.class); // 상위화면 연결
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 모든 스택들을 클리어
            startActivity(intent); // 액티비티 시작
            finish();
            return true;
        case R.id.itemsu: // 아이템 수정클릭시 
            Log.i("edit""1");
            Intent intent2 = new Intent(MemoVIew.this , MemoEdit.class);
            startActivity(intent2);
            finish();
            return true;
        case R.id.itemal: // 아이템 알람클릭리스너 연결
            Log.i("alram""2");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
cs



android.R.id.home:으로 정의되어있다.

먼저 저버튼을 클릭시 구현하는 코드를보면
Intent로 전화면의 Activity와 연결을한다.
그리고 모든스택들을 클리어하는 플래그를 넣어주고 액티비티를 시작한다.
참으로 간단한 코드이다. 이렇게 구현하면 저버튼을 클릭시 바로전화면인 MemoMenu로 넘어가게 될것이다.

만약 초기화면으로 가고싶다면
최상위의 액티비티와 연결을하고 플래그를 추가하면 될것이다.


이번엔 컨텍스트 옵션메뉴의 공유를 보자
공유를 하려면 카톡같은 API를 수동으로 받아와 설정하는 방법도 있는걸로 알지만 나는 클래스를 이용하여서 셋팅을 하였다.
에뮬레이터라 실험은 안되었지만 실제 폰에서는 잘 이용되는것으로 나타났다.

일단 공유버튼을 이용하기위해서는 공유버튼을 가져와야하는데 그것은 

1
ShareActionProvider mShareActionProvider;
cs

이 클래스에서 사용이가능하다.

그리고 메뉴를 생성할때 이 클래스에 인텐트로 데이터들을 삽입하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
 
        Intent shareIntent = new Intent(Intent.ACTION_SEND); //보내기 인텐트 호출
        shareIntent.setType("text/plain"); // 타입을 텍스트로 변경
        String ab = String.format("%s\n%s\n%s",name,day,memo); // 텍스트 포맷                    
        shareIntent.putExtra(Intent.EXTRA_TEXT, ab); // 포맷값 집어 넣기
        
        
        getMenuInflater().inflate(R.menu.memo_view, menu); // 옵션 메뉴 레이아웃을 전개
        MenuItem menuItem = menu.findItem(R.id.menu_item_share2); // 아이템중 메뉴 아이템을 찾음        
        mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); // 프로바이더와 연결
        mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); // 로그파일 저장
        mShareActionProvider.setShareIntent(shareIntent); // 인텐트 실행
        
        return true;
    }
 
cs
이런식으로 이렇게 연결을하면되는데 컨텍스트메뉴의 아이템표시도 하여야한다.
그것은 res->menu에서 설정을한다.

메뉴에서 
1
2
3
4
5
6
7
 
     <item
            android:id="@+id/menu_item_share2"
            android:showAsAction="ifRoom"
            android:title="Share"
            android:actionProviderClass=
                "android.widget.ShareActionProvider" />
cs


이렇게 아이템을 추가하고 연결하면된다.


이제마지막으로 셋팅버튼을 만들고 그 하위메뉴들을 만들것이다.
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
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.memoproz.MemoVIew" >
 
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="셋팅">
        <menu>
            <item android:id="@+id/itemsu"
                android:title="수정"/>
            <item android:id="@+id/itemal"
                android:title="알람설정"/>    
        </menu>
        </item>
        
    
     <item
            android:id="@+id/menu_item_share2"
            android:showAsAction="always"
            android:title="Share"
            android:actionProviderClass=
                "android.widget.ShareActionProvider" />
 
</menu>
 
cs

res->menu 폴더의 메뉴에서 이렇게 코드를 정의하였다.

셋팅이라는 메인 아이템안에
수정과 알람설정이라는 두개의 옵션을 정의하였다.
만약 수정을 클릭한다면 수정창으로 넘어가거나 알람을 클릭하면 알람을 설정한다던가 작동을할껀데
이 시간에서는 일단 클릭해서 수정 뷰로 넘어가는 것까지만 연결하겠다.
이것도 똑같이 onOptionsItemSelected 에서 설정을한다.

코드를 보자

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 onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        switch(item.getItemId()){ // 아이템 아이디를 받아옴
        case android.R.id.home:
            Intent intent = new Intent(this, MemoMenu.class); // 상위화면 연결
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 모든 스택들을 클리어
            startActivity(intent); // 액티비티 시작
            finish();
            return true;
        case R.id.itemsu: // 아이템 수정클릭시 
            Log.i("edit""1");
            Intent intent2 = new Intent(MemoVIew.this , MemoEdit.class); // 에디트 클래스호출
            startActivity(intent2);
            finish();
            return true;
        case R.id.itemal: // 아이템 알람클릭리스너 연결
            Log.i("alram""2");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
cs

먼저 아이템 아이디로 클릭시 getItemId로 어떤 아이디를 클릭했는지 확인뒤 수정을 클릭시 수정화면으로 넘어가게되는 프로그램이다. 

수정의 액티비티는 기본 안드로이드 메인레이아웃으로 정의해놓았다. 수정을 클릭해보면 이렇게 화면이 나온다.


다음시간에는 수정화면 뷰의 완성및DB 수정후 리스트뷰의 업데이트 및 알람설정을 만들어보겠다.








728x90