[안드로이드] 액션바(Actionbar)에 버튼 추가하기, 탭모드

2018. 1. 17. 16:53 안드로이드/뷰(View)

[안드로이드] 액션바(Actionbar)



<액션바(Actionbar)>

액션바 - 단순히 제목만을 표시하거나 간단한 정보만을 표시
=> 애플리케이션과 사용자의 현재 위치 식별
=> 각종 메뉴 - 탐색메뉴, 단축메뉴
=> 다른 애플리케이션 사이의 내비게이션 지원


* 액션바의 출력 옵션 상수
1) DISPLAY_HOME_AS_UP : 홈 아이콘에 뒤로 가기 모양의 < 아이콘을 같이 표시
2) DISPLAY_SHOW_HOME : 홈 영역 활성화, 홈 아이콘 표시 여부 지정
3) DISPLAY_SHOW_TITLE : 타이틀 표시
4) DISPLAY_USE_LOGO : 로고 아이콘 사용
5) DISPLAY_SHOW_CUSTOM : 사용자 영역 활성화



실습1 - 액션바에 버튼(액션항목) 추가
: 버튼을 포함하는 XML 파일을 생성 한 후 ActionBar 클래스가 제공하는
setCustomView() 메소드를 통하여 액션바에 배치

  • 앱의 메인화면 출력 -> activity_actionbardemo.xml(id가 body인 리니어레이아웃), ActionbarDemo.java
  • 액션바 영역에서 버튼 레이아웃 -> button.xml

 


1) button.xml - 액션바에 추가할 버튼 항목

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/white"
        android:text="흰 바탕"
        android:onClick="onBtnClicked"/>
 
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/black"
        android:text="검은 바탕"
        android:onClick="onBtnClicked"/>
 

</LinearLayout>


2) ActionbarDemo.java

public class ActionbarDemo extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_actionbardemo);
 
        //버튼 리소스를 뷰로 전개
        View myButtonLayout = getLayoutInflater().inflate(R.layout.button, null);
        //액션바의 인스턴스 생성
        ActionBar ab = getSupportActionBar();
        //액션바의 커스텀 영역에 버튼 뷰 추가
        ab.setCustomView(myButtonLayout);
        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME |
                ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM);
    }
 
    public void onBtnClicked(View view){
        LinearLayout ll = (LinearLayout) findViewById(R.id.body);
        switch (view.getId()){
            case R.id.white:
                ll.setBackgroundColor(Color.WHITE);
                break;
            case R.id.black:
                ll.setBackgroundColor(Color.BLACK);
        }
    }
}


* 액션바 - 네비게이션모드

: 표준(디폴트, 리스트, 탭모드)
: 표준 이외에는 액션바가 제공하는 setNavigationMode() 메소드를 호출

* 액션바 - 탭모드
: 액션바에 탭메뉴를 추가
: 탭을 클릭할 때 발생하는 이벤트를 처리하기 위해 TabListener 인터페이스 구현 필요
-> onTabReselected(), onTabSelected(), onTabUnselected()


실습2 - 액션바의 탭모드(탭 클릭시 Toast 출력)
=> addTab() : 새로 생성한 탭을 액선바의 탭으로 지정
=> newTab() : 탭을 새로 생성

=> setTabListener() : 탭에 리스너를 등록하여 클릭 등의 이벤트를 처리 



public class ActionbarDemo2 extends AppCompatActivity implements ActionBar.TabListener {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_actionbardemo);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText("Tab1").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Tab2").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Tab3").setTabListener(this));
    }
 
    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
        Toast.makeText(this, tab.getText() + "선택됨", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        Toast.makeText(this, tab.getText() + "선택됨", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
 
    }
 
 
}




출처 : http://blog.naver.com/kcwwck77/220561789931