Android 구성 요소 DrawerLayout 모방 왕 이 뉴스 v 4.4 사 이 드 메뉴

개술 
      오늘 이 블 로 그 는 DrawerLayout 에 대한 기본 적 인 용법 을 기록 할 것 입 니 다.DrawerLayout 의 용법 에 대해 잘 모 르 는 경우 가 많 을 것 이 라 고 생각 합 니 다.이것 도 비교적 정상 적 인 일 입 니 다.DrawerLayout 는 안 드 로 이 드 구성 요소 로 서 구 글 이 나중에 안 드 로 이 드 에 추 가 했 기 때 문 입 니 다.android.support.v4 가방 에 있 습 니 다.그렇다면 DrawerLayout 는 어떤 구성 요소 일 까요?우 리 는 우리 가 안 드 로 이 드 에서 각종 앱 을 사용 할 때 앱 홈 페이지 에 보통'사 이 드 메뉴'가 있다 는 것 을 알 고 있 습 니까?사 이 드 스 케 이 트 메뉴 의 실현 에 대해 저 는 앞의 블 로그 에 소개 가 있 습 니 다.더 알 고 싶 은 친 구 는 걸음 을 옮 겨 주세요.
Android 사용자 정의 컨트롤―사 이 드 메뉴
Android 사용자 정의 컨트롤―오픈 소스 구성 요소 SlidingMenu 프로젝트 통합
      '왕 이 뉴스'클 라 이언 트 v 4.4 의 캡 처 를 통 해 이 DrawerLayout 서랍 식 레이아웃 이 어떤 모습 인지 설명 합 니 다.
   
       자,보시 다시 피 왕 이 뉴스 클 라 이언 트 의 효과 가 매우 뚜렷 합 니 다.우리 손가락 이 화면 왼쪽 에서 오른쪽으로 미 끄 러 질 때 서랍 식 메뉴 가 왼쪽 에서 튀 어 나 오고'떠 있 는'메 인 화면 위 에 있 습 니 다.장치 에 제 한 된 공간 을 합 리 적 으로 이용 합 니 다.마찬가지 로 손가락 이 화면 오른쪽 에서 왼쪽으로 미 끄 러 지면 왼쪽으로 튀 어 나 오 는 서랍 식 메뉴 가 나타 납 니 다.사용자 체험 효 과 는 좋 습 니 다.DrawerLayout 가 나타 나 기 전에 사 이 드 메뉴 를 만들어 야 할 때 Github 의 오픈 소스 프로젝트 SlidingMenu 를 사용 해 야 합 니 다.Google 도 SlidingMenu 의 강력 한 점 을 보 았 을 수도 있 습 니 다.그래서 Android 후기 버 전에 DrawerLayout 을 추가 하여 SlidingMenu 와 같은 기능 을 수행 하 는 구성 요 소 를 추 가 했 습 니 다.또한 초기 버 전 을 호 환 하기 위해 안 드 로 이 드,슈퍼 port.v4 패키지 에 추가 합 니 다.
DrawerLayout 에 대한 Training:http://developer.android.com/training/implementing-navigation/nav-drawer.html
DrawerLayout 에 대한 API:http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
또한 Google 의 Training 과정 을 번 역 했 습 니 다.주 소 는 다음 과 같 습 니 다.https://www.jb51.net/article/102142.htm
효과 미리 보기

서랍 레이아웃 만 들 기
      아래 서랍 레이아웃 은 android.support.v4.DrawerLayout 를 참조 합 니 다.LineaLayout,RelativeLayout 등 레이아웃 과 같이 정 의 됩 니 다.DrawerLayout 내부 에서 3 개의 레이아웃 을 정의 합 니 다.각각 메 인 화면 을 관리 하 는 FrameLayout 입 니 다.이 레이아웃 은 화면 전환 을 보 여 주 는 Fragment 입 니 다.다음은 ListView 입 니 다.메뉴 목록 을 보 여 주 는 데 사 용 됩 니 다.마지막 으로 RelativeLayout 입 니 다.오른쪽 레이아웃 을 보 여 줍 니 다.레이아웃 코드 는 다음 과 같 습 니 다.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/drawer_layout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 
 <FrameLayout 
 android:id="@+id/content_frame" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 
 
 <ListView 
 android:id="@+id/left_drawer" 
 android:layout_width="200dp" 
 android:layout_height="match_parent" 
 android:layout_gravity="start" 
 android:background="#111" 
 android:choiceMode="singleChoice" 
 android:divider="@android:color/transparent" 
 android:dividerHeight="0dp" /> 
 
 <RelativeLayout 
 android:id="@+id/right_drawer" 
 android:layout_width="220dp" 
 android:layout_height="match_parent" 
 android:layout_gravity="end" 
 android:background="#111" 
 android:gravity="center_horizontal" > 
 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="     " 
 android:textColor="@android:color/white" 
 android:textSize="24sp" /> 
 </RelativeLayout> 
 
</android.support.v4.widget.DrawerLayout> 
이 레이아웃 파일 은 중요 한 레이아웃 특징 을 시범 하 였 다.
  • 주요 내용 의 보기(FrameLayout)는 DrawLayout 의 첫 번 째 키 요소 여야 합 니 다.네 비게 이 션 서랍 은 주요 내용 보기 위 에 있 기 때 문 입 니 다.
  • 주요 내용 보 기 는 부모 보기 와 일치 하 는 너비 와 높이 로 설정 되 어 있 습 니 다.전체 인터페이스 내 비게 이 션 서랍 이 숨겨 져 있 기 때 문 입 니 다.
  • 서랍 보기(ListView)는 수평 중력 과 android:layot 를 지정 해 야 합 니 다.gravity 속성.오른쪽 에서 왼쪽(RTL)언어 를 지원 합 니 다."left"대신 지정 값 과"start"를 지원 합 니 다.(그래서 서랍 에 레이아웃 오른쪽 에 있 습 니 다.레이아웃 이 RTL 일 때)여 기 는 ListView 를 왼쪽 표시 줄 메뉴 로 설정 합 니 다.그래서 android:layotgravity 속성 을"start"로 설정 하고,RelativeLayout 를 오른쪽 표시 줄 로 설정 하고,android:layot 를 설정 합 니 다.gravity 속성 은"end"입 니 다.
  • 서랍 보 기 는 폭 을 dp 단위 와 높이 로 부모 보기 와 일치 하도록 지정 합 니 다.서랍 안의 너 비 는 320 dp 를 초과 할 수 없 기 때문에 사용 자 는 항상 주요 내용 보기 의 일부분 을 볼 수 있 습 니 다.
  • 서랍 목록 초기 화
           위 에서 말 한 바 와 같이 DrawerLayout 에는 왼쪽 표시 줄 사 이 드 슬라이드 메뉴 로 ListView 가 포함 되 어 있 기 때문에 이 서랍 목록 을 먼저 초기 화하 고 이 목록 에 데 이 터 를 맞 춰 야 합 니 다.데이터 어댑터 는 가장 간단 한 Array Adapter 를 사용 합 니 다.아 날로 그 데 이 터 는 res/values/strings.xml 에 간단하게 정의 되 어 있 습 니 다.다음 과 같 습 니 다.
    
    <string-array name="menu_array"> 
     <item>Menu 1</item> 
     <item>Menu 2</item> 
     <item>Menu 3</item> 
     <item>Menu 4</item> 
    </string-array> 
    
           자바 코드 에서 먼저 MainActivity 를 만 들 고 android.support.v4.app.Fragment Activity 를 계승 합 니 다.나중에 Fragment 간 전환 이 필요 하기 때 문 입 니 다.
    
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ...... 
     //         
     mMenuTitles = getResources().getStringArray(R.array.menu_array); 
     mMenuListView.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mMenuTitles)); 
     mMenuListView.setOnItemClickListener(new DrawerItemClickListener()); 
     ...... 
    } 
    
    탐색 클릭 이벤트 처리
          사용자 가 서랍 목록 에 있 는 아 이 템 을 선 택 했 을 때 시스템 은 온 아 이 템 클릭 Listener 의 온 아 이 템 클릭()을 호출 하여 seton 아 이 템 클릭 Listener()에 게 온 아 이 템 클릭()방법 에서 무엇 을 하 는 지 알려 줍 니 다.다음 예 에서 모든 아 이 템 을 선택 하면 주요 내용 의 레이아웃 에 다른 Fragment 를 삽입 합 니 다.또한 내 비게 이 션 목록 의 내용 을 Fragment 에 전달 합 니 다.다음은 부분 코드 입 니 다.
    
    /** 
     * ListView  Item     
     * 
     */ 
    private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
     } 
    } 
     
    /** 
     *         Fragment 
     * 
     * @param position 
     */ 
    private void selectItem(int position) { 
     // TODO Auto-generated method stub 
     Fragment fragment = new ContentFragment(); 
     Bundle args = new Bundle(); 
     switch (position) { 
     case 0: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 1: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 2: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 3: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     default: 
     break; 
     } 
     fragment.setArguments(args); // FragmentActivity             Fragment 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
     
     //       item title,       
     mMenuListView.setItemChecked(position, true); 
     setTitle(mMenuTitles[position]); 
     mDrawerLayout.closeDrawer(mMenuListView); 
    } 
    
    오픈 소스 material-menu 의 통합
           세심 한 친 구 는'왕 이 뉴스'v 4.4 클 라 이언 트 홈 페이지 왼쪽 상단 에 메뉴'동적'메뉴 버튼 이 있 는 것 을 발견 할 수 있 습 니 다.디 스 플레이 프로 세 스 가 이 렇 습 니 다.메뉴 가 열 리 지 않 았 을 때'3'과 같은 세 개의 횡선 을 표시 합 니 다.메뉴 가 열 렸 을 때'<-'라 는 단 추 를 표시 합 니 다.끊임없이 변화 합 니 다.이런 거 좀 화사 하지 않 아 요?!안 드 로 이 드 5.0 을 알 아 보신 분 들 은 이 효과 가 안 드 로 이 드 5.0 이 새로 출시 한 머 티 리 얼 디자인 언어 를 사용 해 만 든 효과 라 는 것 을 알 수 있 을 것 입 니 다.그렇다면 이 효 과 를 어떻게 따라 해 야 할 까요?죄송합니다.게 으 름 을 피 워 서 소 와 소의 Github 에서 이러한 효 과 를 찾 았 습 니 다.material-menu 구성 요 소 는 Android 5.0 의 Material Design 효 과 를 모 의 했 습 니 다.주의해 야 할 것 은 이 구성 요소 에서 JackWharton 의 Nine Old Androids 애니메이션 효 과 를 사 용 했 습 니 다.
    material-menu 홈 페이지:https://github.com/balysv/material-menu
    NineOldAndroids 홈 페이지:https://github.com/JakeWharton/NineOldAndroids
    material-menu 의 사용 은 홈 페이지 의 데모 와 설명 을 참고 할 수 있 으 며,통합 시 Nine Old Androids 내 보 내기 jar 를 다운로드 하여 프로젝트 에 통합 해 야 합 니 다.다음은 제 가 사용 하 는 부분 코드 입 니 다.
    
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ...... 
     //        ,              
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
     //   ActionBar  ,            
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 
     
     mMaterialMenuIcon = new MaterialMenuIcon(this, Color.WHITE, Stroke.THIN); 
     
     mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { 
     
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
     showView = drawerView; 
     if (drawerView == mMenuListView) { 
     mMaterialMenuIcon.setTransformationOffset(MaterialMenuDrawable.AnimationState.BURGER_ARROW, isDirection_left ? 2 - slideOffset : slideOffset); 
     } else if (drawerView == right_drawer) { 
     mMaterialMenuIcon.setTransformationOffset(MaterialMenuDrawable.AnimationState.BURGER_ARROW, isDirection_right ? 2 - slideOffset : slideOffset); 
     } 
     } 
     
     @Override 
     public void onDrawerOpened(android.view.View drawerView) { 
     if (drawerView == mMenuListView) { 
     isDirection_left = true; 
     } else if (drawerView == right_drawer) { 
     isDirection_right = true; 
     } 
     } 
     
     @Override 
     public void onDrawerClosed(android.view.View drawerView) { 
     if (drawerView == mMenuListView) { 
     isDirection_left = false; 
     } else if (drawerView == right_drawer) { 
     isDirection_right = false; 
     showView = mMenuListView; 
     } 
     } 
     }); 
     ...... 
     
    } 
    
    또한,meterial-menu 의 상 태 를 연결 해 야 합 니 다.Activity 의 onPostCreate 와 onSave InstanceState 방법 을 덮어 써 야 합 니 다.
    
    /** 
    *   onPostCreate     ,     icon state 
    */ 
    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mMaterialMenuIcon.syncState(savedInstanceState); 
    } 
     
    /** 
    *   onSaveInstanceState     ,    icon state 
    */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     mMaterialMenuIcon.onSaveInstanceState(outState); 
     super.onSaveInstanceState(outState); 
    } 
    
    Action Bar 메뉴 단추 추가
          '왕 이 뉴스'v 4.4 클 라 이언 트 홈 페이지 를 최대한 모 의 하기 위해 저도 제목 표시 줄 오른쪽 상단 에 작은 아이콘 을 추가 합 니 다.이 작은 아이콘 을 클릭 할 때 오른쪽 표시 줄 메뉴 를 팝 업 할 수 있 도록 실현 방식 이 간단 합 니 다.Action Bar 에 네 비게 이 션 을 추가 하 는 지식 은 csdn 에서 설명 을 찾 거나 Android 개발 자 홈 페이지 에 올 라 가 원본 문 서 를 볼 수 있 습 니 다.저 는 먼저 res/menu 에서 main.xml 에서 하 나 를 간단하게 정의 합 니 다.
    
    <menu xmlns:android="http://schemas.android.com/apk/res/android" > 
     
     <item 
     android:id="@+id/action_personal" 
     android:icon="@drawable/action_personal" 
     android:orderInCategory="100" 
     android:showAsAction="always" 
     android:title="@string/action_personal"/> 
     
    </menu> 
    
    정의 작업 이 완료 되면 메뉴 레이아웃 을 불 러 와 야 합 니 다:
    
    /** 
    *      
    */ 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    
    제목 표시 줄 탐색 클릭 이벤트 처리
    
    /** 
    *   ActionBar    
    */ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     switch (id) { 
     case android.R.id.home: 
     if (showView == mMenuListView) { 
     if (!isDirection_left) { //         ,   
     mDrawerLayout.openDrawer(mMenuListView); 
     } else {//         ,   
     mDrawerLayout.closeDrawer(mMenuListView); 
     } 
     } else if (showView == right_drawer) { 
     if (!isDirection_right) {//       ,   
     mDrawerLayout.openDrawer(right_drawer); 
     } else {//       ,   
     mDrawerLayout.closeDrawer(right_drawer); 
     } 
     } 
     break; 
     case R.id.action_personal: 
     if (!isDirection_right) {//       ,   
     if (showView == mMenuListView) { 
     mDrawerLayout.closeDrawer(mMenuListView); 
     } 
     mDrawerLayout.openDrawer(right_drawer); 
     } else {//       ,   
     mDrawerLayout.closeDrawer(right_drawer); 
     } 
     break; 
     default: 
     break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    
          이 단락 의 논 리 는 약간 복잡 합 니 다.사실은 제 가 한 것 은 이 렇 습 니 다.메 인 화면 에 메뉴 레이아웃 만 표시 할 수 있 도록 해 야 합 니 다.왼쪽 메뉴 레이아웃 이 표 시 될 때 오른쪽 메뉴 레이아웃 을 열 때 왼쪽 메뉴 레이아웃 을 숨겨 야 합 니 다.마찬가지 로 오른쪽 메뉴 레이아웃 이 표 시 될 때 왼쪽 메뉴 레이아웃 을 열 려 면 오른쪽 메뉴 레이아웃 을 먼저 숨겨 야 합 니 다.현재 표시 되 거나 닫 힐 레이아웃 을 판단 하기 위해 전역 변수 에서 쇼 뷰 를 정의 하여 현재 표시 되 거나 닫 힐 보 기 를 표시 합 니 다.쇼 뷰==mMenuListView 를 사용 하면 왼쪽 메뉴 레이아웃 이 표시 되 거나 숨겨 질 것 임 을 설명 합 니 다.이 때 메뉴 가 보기 mMenuListView 에 표 시 된 태그 인지 여 부 를 판단 합 니 다 isDirection왼쪽 보기 메뉴 를 열거 나 닫 습 니 다.
          마찬가지 로 현재 오른쪽 네 비게 이 션 메뉴 가 표시 되 거나 숨겨 져 있다 면 오른쪽 네 비게 이 션 이 표시 되 었 는 지 여 부 를 판단 하여 열 리 거나 숨겨 진 결정 을 내 려 야 합 니 다.
          여기 서 의 논 리 는 약간 어 지 럽 게 해석 되 는 것 같 습 니 다.그리고 코드 는 세 션 으로 나 누 어 붙 여 져 서 이해 하기 어렵 습 니 다.더 이해 해 야 한다 면 아래 부분 을 계속 보 세 요.저 는 이미 붙 여 놓 았 기 때문에 자바 코드 도 상세 하고 주석 도 상세 하 며 이해 하기 쉽 습 니 다.정말 안 됩 니 다.블 로그 아래 의 다운로드 링크 를 클릭 하여 소스 코드 를 직접 다운로드 하여 실행 할 수 있 습 니 다.
    모든 원본 코드
    
    public class MainActivity extends FragmentActivity { 
     
     /** DrawerLayout */ 
     private DrawerLayout mDrawerLayout; 
     /**       */ 
     private ListView mMenuListView; 
     /**     */ 
     private RelativeLayout right_drawer; 
     /**      */ 
     private String[] mMenuTitles; 
     /** Material Design   */ 
     private MaterialMenuIcon mMaterialMenuIcon; 
     /**     /     */ 
     private boolean isDirection_left = false; 
     /**      /     */ 
     private boolean isDirection_right = false; 
     private View showView; 
     
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mMenuListView = (ListView) findViewById(R.id.left_drawer); 
     right_drawer = (RelativeLayout) findViewById(R.id.right_drawer); 
     this.showView = mMenuListView; 
     
     //         
     mMenuTitles = getResources().getStringArray(R.array.menu_array); 
     mMenuListView.setAdapter(new ArrayAdapter<String>(this, 
     R.layout.drawer_list_item, mMenuTitles)); 
     mMenuListView.setOnItemClickListener(new DrawerItemClickListener()); 
     
     //        ,              
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
     GravityCompat.START); 
     //   ActionBar  ,            
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 
     
     mMaterialMenuIcon = new MaterialMenuIcon(this, Color.WHITE, Stroke.THIN); 
     mDrawerLayout.setDrawerListener(new DrawerLayoutStateListener()); 
     
     if (savedInstanceState == null) { 
     selectItem(0); 
     } 
     
     } 
     
     /** 
     * ListView  Item     
     * 
     */ 
     private class DrawerItemClickListener implements 
     ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
     selectItem(position); 
     } 
     } 
     
     /** 
     * DrawerLayout       
     */ 
     private class DrawerLayoutStateListener extends 
     DrawerLayout.SimpleDrawerListener { 
     /** 
     *               
     */ 
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
     showView = drawerView; 
     if (drawerView == mMenuListView) {//   isDirection_left       
     mMaterialMenuIcon.setTransformationOffset( 
     MaterialMenuDrawable.AnimationState.BURGER_ARROW, 
     isDirection_left ? 2 - slideOffset : slideOffset); 
     } else if (drawerView == right_drawer) {//   isDirection_right       
     mMaterialMenuIcon.setTransformationOffset( 
     MaterialMenuDrawable.AnimationState.BURGER_ARROW, 
     isDirection_right ? 2 - slideOffset : slideOffset); 
     } 
     } 
     
     /** 
     *            
     */ 
     @Override 
     public void onDrawerOpened(android.view.View drawerView) { 
     if (drawerView == mMenuListView) { 
     isDirection_left = true; 
     } else if (drawerView == right_drawer) { 
     isDirection_right = true; 
     } 
     } 
     
     /** 
     *            
     */ 
     @Override 
     public void onDrawerClosed(android.view.View drawerView) { 
     if (drawerView == mMenuListView) { 
     isDirection_left = false; 
     } else if (drawerView == right_drawer) { 
     isDirection_right = false; 
     showView = mMenuListView; 
     } 
     } 
     } 
     
     /** 
     *         Fragment 
     * 
     * @param position 
     */ 
     private void selectItem(int position) { 
     Fragment fragment = new ContentFragment(); 
     Bundle args = new Bundle(); 
     switch (position) { 
     case 0: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 1: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 2: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     case 3: 
     args.putString("key", mMenuTitles[position]); 
     break; 
     default: 
     break; 
     } 
     fragment.setArguments(args); // FragmentActivity             Fragment 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
     .replace(R.id.content_frame, fragment).commit(); 
     
     //       item title,       
     mMenuListView.setItemChecked(position, true); 
     setTitle(mMenuTitles[position]); 
     mDrawerLayout.closeDrawer(mMenuListView); 
     } 
     
     /** 
     *   ActionBar    
     */ 
     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     switch (id) { 
     case android.R.id.home: 
     if (showView == mMenuListView) { 
     if (!isDirection_left) { //         ,   
     mDrawerLayout.openDrawer(mMenuListView); 
     } else {//         ,   
     mDrawerLayout.closeDrawer(mMenuListView); 
     } 
     } else if (showView == right_drawer) { 
     if (!isDirection_right) {//       ,   
     mDrawerLayout.openDrawer(right_drawer); 
     } else {//       ,   
     mDrawerLayout.closeDrawer(right_drawer); 
     } 
     } 
     break; 
     case R.id.action_personal: 
     if (!isDirection_right) {//       ,   
     if (showView == mMenuListView) { 
     mDrawerLayout.closeDrawer(mMenuListView); 
     } 
     mDrawerLayout.openDrawer(right_drawer); 
     } else {//       ,   
     mDrawerLayout.closeDrawer(right_drawer); 
     } 
     break; 
     default: 
     break; 
     } 
     return super.onOptionsItemSelected(item); 
     } 
     
     /** 
     *   onPostCreate     ,     icon state 
     */ 
     @Override 
     protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mMaterialMenuIcon.syncState(savedInstanceState); 
     } 
     
     /** 
     *   onSaveInstanceState     ,    icon state 
     */ 
     @Override 
     protected void onSaveInstanceState(Bundle outState) { 
     mMaterialMenuIcon.onSaveInstanceState(outState); 
     super.onSaveInstanceState(outState); 
     } 
     
     /** 
     *      
     */ 
     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
     } 
     
    } 
    
    원본 코드 는 여기에서 다운로드 하 십시오:http://xiazai.jb51.net/201701/yuanma/AndroidDrawerLayout(jb51.net).rar
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기