총 게시물 1,102건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[강좌]

DoubleDrawer(5) - 좌우 모두 NavigationView 사용/[Android]

글쓴이 : 김병희라고요 날짜 : 2016-10-27 (목) 15:41 조회 : 1567
글주소 : http://www.androidside.com/B56/32563
 
  반도체전문업체 NXP반도체
반도체전문업체, 휴대전화, 가전, ID, 범용반도체, 소프트웨어, 반도체제품안내.
www.nxp.com
  엠브이테크
임베디드 개발용역 및 양산 Rockchip Freescale 엑시노스
www.mvtech.or.kr
  굿잡아카데미컴퓨터학원 이주효
수강료조회, 국비지원, 멘토지정제 1대1상담, 겨울방학특강 조기등록 50%이벤트
goodjob-academy.kr/
신청하기


DoubleDrawer(5) - 좌우 모두 NavigationView 사용/[Android]

/ 2016.10.27. 최초 작성


원본 : http://blog.daum.net/andro_java/723


전체 소스 : https://github.com/k8z7/DD/tree/master


아래 글에서 이어진다.


DoubleDrawer(4) - 소스 오류(아이콘 토글 문제) 수정, 깃허브 푸시 주의/[Android]

http://blog.daum.net/andro_java/722


우리는 좌우 서랍(Drawer) 중에서 왼쪽은 NavigationView, 오른쪽은 LinearLayout(슬라이드 레이아웃)을 사용했다.


그런데 양쪽 다 NavigationView를 사용할 수는 없을까?


1. 프로젝트 DD


1) 새 프로젝트


Drawer 크기 액션바 가리지 않게 조정(DrawerLayout. NavigationView)/[Android] http://blog.daum.net/andro_java/715


참고하여 새 프로젝트를 만든다.


2) FloatingActionButton


레이아웃 태그, 자바 소스코드 지운다.


3) 아이디, 필드명(변수명) 및 파일명 수정


- drawer_layout/drawer > drawerLeft


- nav_header_main > nav_left


- nav_view/navigationView > naviLeft


<실행 이상무>

DD_01.zip

---------------------------------------


2. 오른쪽 서랍(drawer)


1) activity_main.xml 드로어 복사


레이아웃 drawerRight 안에 naviRight 뷰를 담고, 그 뷰는 nav_right 레이아웃을 헤더로 올리는 코드로 수정한다.


- 수정 : start -> end


    tools:openDrawer="end"

        android:layout_gravity="end"


- 추가 :


        android:layout_marginTop="20dp"


2) content_main.xml


이 코드를 content_main.xml 파일에 덮어씌운다.


<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout

    android:id="@+id/drawerRight"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:openDrawer="end"

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    xmlns:app="http://schemas.android.com/apk/res-auto">


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Hello World!" />


    <android.support.design.widget.NavigationView

        android:id="@+id/naviRight"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:layout_marginTop="20dp"

        android:layout_gravity="end"

        android:fitsSystemWindows="false"

        app:headerLayout="@layout/nav_right"

        app:menu="@menu/activity_main_drawer" />


</android.support.v4.widget.DrawerLayout>


3) nav_right.xml


파일을 새로 만든다.

nav_left.xml 파일에서 뷰의 아이디 모두 지우고, 통째 복사한다.

위 파일에 덮어쓴다.


4) 테스트


왼쪽은 토글/스와이프로 열고 닫아진다.

오른쪽은 스와이프로 닫아진다.


naviLeft 뷰에는 다음과 같이 리스너를 달았기 때문에 아이템 클릭하면 반응한다.


        NavigationView naviLeft = (NavigationView) findViewById(R.id.naviLeft);

        naviLeft.setNavigationItemSelectedListener(this);


그러나, naviRight 뷰는 아이템 클릭해도 꿈쩍하지 않는다.

이런 차이점을 기억해두면 나중 코딩에 도움이 되지 않을까?


오른쪽에서 토글을 적용할 수 있을지는, 백업 후 다음 버전에서 시도한다.


<실행 이상무>

DD_02.zip

---------------------------------------


3. 오른쪽 서랍(drawer) 토글? 안됨


오른쪽 서랍(drawer)에도 구글이 제공하는 토글 버튼을 달아서 사용할 수 있을까?


1) 코드 수정


toggle > toggleLeft


2) 현재 코드


        DrawerLayout drawerLeft = (DrawerLayout) findViewById(R.id.drawerLeft);

        ActionBarDrawerToggle toggleLeft = new ActionBarDrawerToggle(

                this, drawerLeft, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);

        drawerLeft.setDrawerListener(toggleLeft);

        toggleLeft.syncState();


3) 복사


위 코드를 복사하여 오른쪽에 맞추어보자.


        DrawerLayout drawerRight = (DrawerLayout) findViewById(R.id.drawerRight);

        ActionBarDrawerToggle toggleRight = new ActionBarDrawerToggle(

                this, drawerRight, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);

        drawerRight.setDrawerListener(toggleRight);

        toggleRight.syncState();


4) 포기


이것은 지원되지 않는 듯하다.


코드 수정한 것은 그대로 두고, 복사하여 붙인 것만 잘라서 버리고 넘어간다.


4. 오른쪽 서랍(drawer) 열기/닫기 버튼(아이콘)


1) 개명


main.xml > menu_main.xml // 자바소스 함께

activity_main_drawer.xml > menu_navi.xml // 레이아웃 2군데 함께


2) 메뉴 수정


- strings.xml


    <string name="action_settings">Settings</string>

=>

    <string name="action_toggle">Tog</string>


- menu_main.xml


    <item

        android:id="@+id/action_toggle"

        android:title="@string/action_toggle"

        app:showAsAction="always" />


아이콘 없이 always 주면 title 글자가 아이콘 대신 붙박이로 액션바에 드러나 보인다.


3) MainActivity.java 파일 수정


- onCreate


        DrawerLayout drawerLeft = (DrawerLayout) findViewById(R.id.drawerLeft);

=>

    private DrawerLayout drawerLeft, drawerRight;

        drawerRight = (DrawerLayout) findViewById(R.id.drawerRight);

        drawerLeft = (DrawerLayout) findViewById(R.id.drawerLeft);


- onBackPressed


    @Override

    public void onBackPressed() {

        if (drawerLeft.isDrawerOpen(GravityCompat.START)) { drawerLeft.closeDrawer(GravityCompat.START); }

        else {

            if (drawerRight.isDrawerOpen(GravityCompat.START)) { drawerRight.closeDrawer(GravityCompat.START); }

            else super.onBackPressed();

        }

    }


- onOptionsItemSelected


        //noinspection SimplifiableIfStatement

        if (id == R.id.action_toggle) {

            if (drawerRight.isDrawerOpen(GravityCompat.END)) { drawerRight.closeDrawer(GravityCompat.END); }

            else {

                if (drawerLeft.isDrawerOpen(GravityCompat.START)) { drawerLeft.closeDrawer(GravityCompat.START); }

                drawerRight.openDrawer(GravityCompat.END);

            }

            return true;

        }


왼쪽 서랍이 열린 상태에서는 오른쪽 서랍을 열어도 밑에 깔려서 보이지 않는다.

그러므로 오른쪽 서랍을 열 때는 먼저 왼쪽 서랍이 열려 있는지 살펴서 닫아주고 오른쪽을 여는 것이다.


4) 테스트


오른쪽이 열려 있든 말든 왼쪽은 열리고 오른쪽은 그대로 두지만, 왼쪽이 열려 있을 때 오른쪽을 열면 왼쪽은 닫힌다.

잘 돌아간다.


<실행 이상무>

DD_03.zip

---------------------------------------


이제 이 소스에 직전 강좌까지 만들었던 소스를 반영하는 것은 필요하면 지난 강좌들을 참고하여 처리할 수 있을 것이다.

이것으로 이번 시리즈 강좌는 마무리한다.


전체 소스 : https://github.com/k8z7/DD/tree/master





추천 버튼을 클릭하면 추천한 자와 추천받은 자 모두에게 포인트가 지급됩니다.

이전글  다음글  목록 글쓰기

총 게시물 1,102건, 최근 0 건 안내 RSS
번호 분류 제목 글쓴이 날짜 추천 조회
1102 강좌  100 Days of Google Dev, 1: Android Design Support Library 2 StanleyKou 01-18 0 123
1101 TIP&TECH  리스트뷰에서 스위치,체크박스사용시 4 에찌 05-08 1 1335
1100 TIP&TECH  뷰(RecyclerView/...)에 Max Height 주기/[Android] 김병희라고요 04-26 0 998
1099 TIP&TECH  TabLayout ClickEvent 에찌 04-21 0 973
1098 TIP&TECH  현재 사용하고 있는 어플 foreground인지 backgroun… 4 에찌 04-14 1 1540
1097 TIP&TECH  안드로이드 Drawble 에 해상도 마다 이미지를 … 1 에찌 04-14 0 1082
1096 TIP&TECH  fragment 에서 ButterKnife 사용 시 resource가져올 때… 1 에찌 04-12 0 894
1095 TIP&TECH  Youtube 및 facebook 동영상 업로드 할때 1 희망과꿈을 03-28 0 1126
1094 TIP&TECH  google service lib 가져올 때 3 에찌 03-20 2 1254
1093 소스코드  CentralRV 프로젝트 - RecyclerView 가로/세로 가운… 1 김병희라고요 01-30 1 2144
1092 TIP&TECH  번개검색 시스템/[Android] 2 김병희라고요 12-29 2 1692
1091 TIP&TECH  RecyclerView 특정 포지션으로 스크롤 - smoothScroll… 1 김병희라고요 12-12 1 1604
1090 강좌  왕앱따 107. 자바/C++ 파일읽기 속도 비교/[Androi 김병희라고요 11-26 0 1769
1089 강좌  왕앱따 106. C++ 동영상 강좌/[Android] 김병희라고요 11-23 0 2008
1088 소스코드  AOSP용 한글 키보드 입력키 엘카이저 11-17 1 1734
1087 강좌  addDrawerListener, setDrawerListener(deprecated)/[Android] 김병희라고요 11-02 2 2147
1086 강좌  왕앱따 103. 아이콘 반복클릭 테스트/[Android] 김병희라고요 11-01 0 1662
1085 강좌  왕앱따 100. 안드로이드 왕초보의 앱개발 따라… 김병희라고요 10-29 0 2070
1084 강좌  DoubleDrawer(5) - 좌우 모두 NavigationView 사용/[Andro… 김병희라고요 10-27 0 1568
1083 강좌  DoubleDrawer(4) - 소스 오류(아이콘 토글 문제) 수… 김병희라고요 10-27 0 1375
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  다음  맨끝
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기