본문 바로가기
Android

[Android] 엑션바 활용과 메뉴 만들기: getSupportActionBar, onSupportNavigateUp, onCreateOptionsMenu, onOptionsItemSelected

by eyoo 2022. 7. 19.

엑션바의 타이틀을 각각의 엑티비티마다 세팅해줄수 있다.

 

엑션바를 편집하려면 onCreate에 getSupportActionBar를 사용해야 한다.

 

getSupportActionBar().setTitle("직원정보");

# 연봉정보라는 타이틀을 엑션바에 넣었다.

 

 

그 후 Show context Actions를 클릭한 뒤 Extract string resource를 선택하여 스트링 리소스를 만든다.

 

 

 

리소스네임을 설정하여 다양한 상황에 대처할수 있도록 만든다.

 

 

 

위의 과정을 거치면 자동으로 변환된다.

 

getSupportActionBar().setTitle(R.string.Employee_Title);

 

 

엑션바의 타이틀이 바뀐것을 확인할수있다.

 

 

 

이제 엑션바에 백버튼 기능을 넣어보자.

 

먼저 엑션바에 백버튼을 세팅하기 위해 setDisplayHomeAsUpEnabled로 해당 기능을 활성화한다.

 

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

 

 

그 후 onCreate 바깥쪽에 onSupportNavigateUp을 오버라이딩 하여

생성된 백 버튼을 눌렀을때 실행되는 행동을 작성한다.

 

    @Override
    public boolean onSupportNavigateUp() {

        // 1. finish를 이용
//        finish();

        // 기계의 백버튼 눌렀을때 호출되는 콜백함수이용
        onBackPressed();
        return true;
    }

# finish함수를 이용해도 되고 onBackPressed함수를 사용해도 된다.

 

 

엑션바에 백버튼이 생성되었고 해당 버튼을 누르면 뒤로 가지는것을 볼수있다.

 

 

 

엑션바에 메뉴를 만들어 기능을 넣을수도 있다.

 

먼저 res에 menu라는 이름의 새로운 디렉토리를 만든 후, 그 안에 menu 타입의 새로운 리소스 파일을 만든다.

 

 

 

그럼 새로운 xml파일이 생성되는데 여기에 Menu item을 넣어 메뉴를 구성한다.

 

# showAsAction으로 메뉴가 어떻게 나올지 정할수있다.

# Add 메뉴는 showAsAction를 Always로 설정하고 아이콘을 지정해서 엑션바에 +모양으로 항시 나오게 했다.

# About 메뉴는 가장자리의 메뉴버튼을 눌러야 볼수있도록 Never로 설정했다.

 

 

이제 메인에서 onCreateOptionsMenu로 메뉴를 연결한다.

 

// xml로 만든 메뉴를 엑티비티의 화면에 나타나게 해주는 함수
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

 

 

 

그 후 if문을 화용해서 메뉴중 어떤 메뉴를 누르면 어떻게 행동하는지 설정한다.

 

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {

    int itemId = item.getItemId();

    if(itemId == R.id.menuAdd){
        Intent intent = new Intent(MainActivity.this, AddActivity.class);

        startActivity(intent);
    } else if (itemId == R.id.menuAbout){
        // TODO: 클릭했을때 하고싶은일 코드 작성
    }
    return super.onOptionsItemSelected(item);
}

 

 

잘 나오는것을 볼수있다.

 

 

 

 

 

 

 

댓글