Things take time

[Android] DrawerLayout 사용하기 본문

Android(기능)

[Android] DrawerLayout 사용하기

겸손할 겸 2019. 1. 28. 18:01

[DrawerLayout]


https://developer.android.com/reference/android/support/v4/widget/DrawerLayout


기본 개념은 공식 문서에서!


화면의 각 부분으로부터 당겼을 때 하나의 뷰를 drawer 하는, 즉 서랍여는 것과 마찬가지로 꺼내어 보는 역할을 수행하는 레이아웃이다.

Drawer을 사용하기 위한 자식 레이아웃은 layout_gravity 속성을 이용하여 열기 위한 위치를 지정할 수 있다.


DrawerLayout을 사용하기 위해서는 주요 콘텐츠 뷰(메인 뷰)의 height를 match_parent를 사용하고 layout_gravity를 사용하지마라. 메인 뷰가 추가 된후에 drawer를 자식으로 더하고 layout_gravity를 적절히 설정하라. Drawers는 보통 고정된 너비값과 match_parent의 height를 사용한다. => 메인뷰는 Drawers가 나오기 전 바탕이 되는 뷰를 의미한다. Drawers는 메인 뷰 위에 나타나기때문에, 부모 인 메인 뷰의 높이를 따라가기에 match_parent를 사용한다는 것이고, 메인 뷰를 다 덮지 않기 때문에 고정된 너비값을 가진다는 것이다.


애니메이션이 동작하거나 특정 동작중엔 drawers를 펼치는 작업을 하지말고, 기본 idle상태일 때 사용하는 것이 좋다.


도큐먼트의 예제와 참고할만한 좋은 사이트가 있어서 같이 정리!


https://recipes4dev.tistory.com/139


안드로이드 기본 예제들에 대한 설명이 잘되있어서 자주 참고하면 좋을듯!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/btn_open"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OPEN" />
    <Button
        android:id="@+id/btn_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CLOSE" />
 
    <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">
        <!-- The main content view -->
        <TextView
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Main Content View"/>
        <!-- The navigation drawer -->
        <TextView
            android:gravity="center"
            android:layout_gravity="right"
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:background="#009688"
            android:text="Drawer View"/>
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MainActivity extends AppCompatActivity {
 
    DrawerLayout drawerLayout;
    Button btn_open;
    Button btn_close;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        drawerLayout = findViewById(R.id.drawer_layout);
        btn_open = findViewById(R.id.btn_open);
        btn_close = findViewById(R.id.btn_close);
 
        btn_open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawerLayout.openDrawer(Gravity.RIGHT);
            }
        });
 
        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(drawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                    drawerLayout.closeDrawer(Gravity.RIGHT);
                }
            }
        });
    }
}
cs



- 주의

1. 레이아웃에서 drawer에 선언한 layout_gravity와 다른 방향의 값을 코드에 작성하면 에러가 난다. 같은 방향 값으로 주어야한다.

2. DrawerLayout에서 메인이 되는 뷰를 먼저 작성한다.

3. Drawer는 Layout_gravity로 열리는 방향을 지정한다.

4. Drawer는 여러 개를 사용할 수 있다. 특정 뷰에서는 A라는 Drawer를 어떨 때는 B라는 Drawer켜야한다면, openDrawer(View)로 findViewById를 통해 뷰를 파라미터로 넘길 수 있다.