android 사 이 드 슬라이드 메뉴 컨트롤 DrawerLayout 사용 방법 상세 설명

7004 단어 androidDrawerLayout
drawerLayout 는 Support Library 패키지 에서 사 이 드 메뉴 효 과 를 구현 한 컨트롤 로 drawerLayout 는 MenuDrawer 등 제3자 컨트롤 이 등장 한 후 구 글 이 참고 한 결과 물이 라 고 할 수 있 습 니 다.drawerLayout 는 사 이 드 메뉴 와 메 인 콘 텐 츠 구역 두 부분 으로 나 뉘 는데 사 이 드 메뉴 는 제스처 에 따라 펼 쳐 지고 숨 길 수 있 습 니 다(drawerLayout 자체 특성).메 인 콘 텐 츠 구역 의 내용 은 메뉴 의 클릭 에 따라 달라 질 수 있 습 니 다(사용자 가 스스로 실현 해 야 합 니 다).
사용 절차:
DrawerLayout 만 들 기
네 비게 이 션 서랍 을 추가 하기 위해 서 는 레이아웃 인터페이스 에 DrawerLayout 대상 을 레이아웃 의 루트 로 설명 해 야 합 니 다.DrawerLayout 내부 에 두 개의 view 를 추가 합 니 다.
  • View 를 추가 합 니 다.이것 은 응용 프로그램의 주요 내용 을 포함 합 니 다(서랍 이 숨겨 질 때 주요 레이아웃)
  • 다른 View 를 추가 하면 네 비게 이 션 서랍 이 포함 되 어 있 습 니 다.
  • 아래 의 예 에서 보 듯 이 이 레이아웃 은 DrawerLayout 를 사용 하여 두 개의 키 노드 를 포함 합 니 다.하 나 는 FrameLayout 이 고 주요 내용(실행 할 때 Fragment 로 교 체 됩 니 다)과 하나의 ListView 를 네 비게 이 션 서랍 으로 포함 합 니 다.위 에 titlebar 에 있 는 아이콘 은 서랍 을 열 고 닫 는 것 을 책임 집 니 다.
    
    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:id="@+id/titleBar" 
      android:gravity="center_vertical" 
      android:background="@android:color/darker_gray" 
      android:layout_height="40dp"> 
     
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_drawer" 
       android:onClick="onClickDrawerOpened" 
       android:clickable="true" 
       android:id="@+id/imageView" /> 
     </LinearLayout> 
     <android.support.v4.widget.DrawerLayout 
      android:id="@+id/drawer_layout" 
      android:layout_below="@id/titleBar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <!-- The main content view --> 
     
      <FrameLayout 
       android:id="@+id/content_frame" 
     
       android:layout_width="match_parent" 
       android:layout_height="match_parent"></FrameLayout> 
     
      <!-- The navigation drawer --> 
      <ListView 
       android:id="@+id/left_drawer" 
       android:layout_width="240dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="start" 
       android:background="#111" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" /> 
     </android.support.v4.widget.DrawerLayout> 
    </RelativeLayout> 
    위의 이 예 는 몇 가지 중요 한 레이아웃 기 교 를 포함 하고 있다.
  • 메 인 콘 텐 츠 View(FrameLayout 는 최상 위)는 Drawerlayot 의 첫 번 째 키 노드 여야 합 니 다.XML 은 이러한 인터페이스 를 배치 할 때 Z 축의 순서에 따라 배치 하 는 동시에 서랍 은 메 인 콘 텐 츠 의 맨 위 에 있어 야 하기 때 문 입 니 다
  • 메 인 콘 텐 츠 View 는 부모 View 와 일치 하 는 너비 와 높이 로 설정 되 어 있 습 니 다.네 비게 이 션 서랍 이 숨 어 있 을 때 전체 UI 를 채 워 야 하기 때 문 입 니 다
  • 네 비게 이 션 View(ListView)는 하나의 수준의 gravity 가 속성 안 드 로 이 드:layot 를 빌려 야 합 니 다.gravity。오른쪽 에서 왼쪽 까지 의 약속 을 만족 시 키 기 위해 서 는"start"대신"left"값 을 설명 합 니 다.(따라서 이 서랍 은 오른쪽 에 RTL 로 배치 되 어 있 을 때)
  • 4.567917.네 비게 이 션 View 성명 시 폭 은 dp 단위 이 고 높이 는 부모 View 와 일치 합 니 다.사용자 가 어떻게 든 메 인 콘 텐 츠 의 일부분 을 볼 수 있 도록 네 비게 이 션 서랍 의 너 비 는 320 dp 를 초과 해 서 는 안 된다.
    Drawer List 초기 화
    당신 의 Activity 에서 해 야 할 첫 번 째 일 은 네 비게 이 션 서랍 의 목록 항목 을 초기 화 하 는 것 입 니 다.구체 적 으로 어떻게 해 야 할 지 는 앱 의 내용 에 따라 결정 되 지만 네 비게 이 션 서랍 에는 보통 Listview 가 포함 되 어 있 기 때문에 일치 하 는 Adapter(예 를 들 어 Array Adapter 나 Simple CursorAdapter)가 필요 합 니 다.
    다음 예 는 string array 를 통 해 네 비게 이 션 list 를 초기 화 하 는 방법 을 알려 드 립 니 다.
    
    public class MainActivity extends Activity { 
     private DrawerLayout mDrawerLayout; 
     private ListView mDrawerList; 
     
     private String[] mPlanetTitles; 
     
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     
      mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
      mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
      mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     
      // set a custom shadow that overlays the main content when the drawer opens 
      mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
      // set up the drawer's list view with items and click listener 
      mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
        R.layout.drawer_list_item, mPlanetTitles)); 
      mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
     } 
    //................................ 
    } 
    
    탐색 클릭 이벤트 처리
    사용자 가 서랍 목록 에 있 는 Item 을 선 택 했 을 때 시스템 은 onItemClickListener 의 onItemClick()을 호출 하여 setOnItemClickListener()에 게 줍 니 다.
    onItemClick()방법 에서 무엇 을 하 느 냐 는 app 이 실현 하 는 구조 에 달 려 있 습 니 다.아래 의 예 에서 모든 Item 을 선택 하면 주요 내용 의 레이아웃 에 서로 다른 Fragment 를 삽입 합 니 다.
    
    private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectItem(position); 
     } 
     } 
     
     private void selectItem(int position) { 
     // update the main content by replacing fragments 
     Fragment fragment = new PlanetFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); 
     fragment.setArguments(args); 
     
     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
     
     // update selected item and title, then close the drawer 
     mDrawerList.setItemChecked(position, true); 
     mDrawerLayout.closeDrawer(mDrawerList); 
     } 
    
     서랍 을 열 고 닫다 
    onDrawerOpened()와 onDrawerClosed()를 사용 하여 서랍 을 열 고 닫 습 니 다.
    
    public void onClickDrawerOpened(View drawerView) { 
     if(!mDrawerLayout.isDrawerOpen(GravityCompat.START))//if not open ,open or close; 
     { 
     mDrawerLayout.openDrawer(mDrawerList); 
     } 
     else 
     { 
     mDrawerLayout.closeDrawer(mDrawerList); 
     } 
    } 
    
    효과 그림:

    Demo 다운로드 하 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기