반응형

유튜브 채널 hongdroid홍드로이드님의 강의를 보고 학습했습니다.

 

hongdroid홍드로이드

안녕하세요 구디에서 신입 앱 개발자로서의 삶을 살아가고 있는 홍드로이드 라고 합니다. 이 채널에서는 IT 계열 앱 개발자는 도대체 어떻게 하루를 보낼까 하는 분들을 위해서 만들어졌습니다.

www.youtube.com

메인액티비티.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <Button
            android:id="@+id/btn_open"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="버튼"/>
    </LinearLayout>
 
    <include layout = "@layout/activity_drawer"/>
 
 
</androidx.drawerlayout.widget.DrawerLayout>
cs

메인액티비티.java

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.example.customnaviexample;
 
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
 
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends AppCompatActivity {
 
    private DrawerLayout drawerLayout;
    private View drawerView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        drawerView = (View)findViewById(R.id.drawer);
 
 
        Button btn_open = (Button)findViewById(R.id.btn_open);
        btn_open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawerLayout.openDrawer(drawerView);
            }
        });
 
        Button btn_close = (Button)findViewById(R.id.btn_close);
        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawerLayout.closeDrawers();
            }
        });
 
        drawerLayout.setDrawerListener(listener);
        drawerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return true;
            }
        });
    }
 
    DrawerLayout.DrawerListener listener = new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
 
        }
 
        @Override
        public void onDrawerOpened(@NonNull View drawerView) {
 
        }
 
        @Override
        public void onDrawerClosed(@NonNull View drawerView) {
 
        }
 
        @Override
        public void onDrawerStateChanged(int newState) {
 
        }
    };
}
cs

액티비티드로워.xml

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
37
38
39
40
41
42
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#3F51B5"
    android:orientation="vertical"
    android:id="@+id/drawer">
 
    <Button
        android:id="@+id/btn_close"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="메뉴 닫기"
        />
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="seminzzang"
        />
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#F44336"
        android:orientation="vertical">
 
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="테스트 메뉴"
            />
 
        ></LinearLayout>
 
</LinearLayout>
cs

 

이번 시간에는 NavigationMenu에 대해 학습했다.

사실 NavigationMenu에 대한 강의를 이전에 수강했으나,

안드로이드스튜디오에서 제공하는 기본 양식을 학습하는 과정이였고,

이번 시간에는 빈 화면에서 직접 네비게이션 메뉴를 만드는 내용을 배웠다.

네비게이션 메뉴 내용은 이전과 겹치는 내용이 많아, 코드가 복잡하긴 했지만 이해가 안되는 내용은 거의 없었다.

DrawerLayout이라는 처음 보는 클래스가 있었는데, 구글링을 통해 이해할 수 있었다.

1. DrawerLayout : Drawer의 사전적인 의미는 '서랍'인데, 화면을 '서랍'처럼 열고 닫는 기능을 한다.

 DrawerLayout을 사용하기 위해서는 사용할 요소( ex)View, TextView )가 자식(Child)으로 추가되어 있어야 하고, 

 어느 방향에서 열릴지 layout_gravity값이 설정되어 있어야 한다.

 DrawerLayout에서 새로운 View를 연 강의 예제에 반해,

 TextView를 두개를 사용해 네비게이션 메뉴를 만드는 것을 구글링을 하면서 볼 수 있었다.

 이 방법은 다음 시간에 정리해야겠다.

2. 선언

 메인화면이 될 메인액티비티.xml을 DrawerLayout으로 선언하고,

 네비게이션 메뉴가 될 액티비티드로워.xml을 View로 선언했다.

 그 외에 onClick함수를 이용해 기능을 추가한 버튼 또한 아이디를 연결시키고 각각 열리고 닫히는 기능을 구현했다.

 여기서 핵심은 위에서도 말했듯이, 자식이 될 요소에 layout_gravity 값이 설정되어 있어야 한다.

3. 리스너

 리스너를 사용하진 않았지만, 리스너를 코드에 추가했는데,

 리스너는 DrawerLayout에서 특정한 이벤트가 발생했을 때 처리하는 역할을 한다.

 영어 그대로 

 onDrawerSlide는 슬라이드 했을 때,

 onDrawerOpened는 오픈 됐을 때,

 onDrawerClosed는 클로즈 됐을 때,

 onDrawerStateChaged는 드로워의 상태가 변화했을 때 이다.

4. 인클루드

 메인액티비티.xml을 보면 21번째 줄에 <include layout = "@layout/activity_drawer"/> 이 있는데,

 이는 activity_drawer 파일이 activity_main에 연동되어 있음을 의미한다.

 include 구문을 적어주어야 DrawerLayout이 동작한다.

출력화면 - Closed
출력화면 - Opened

 

반응형

+ Recent posts