유튜브 채널 hongdroid홍드로이드님의 강의를 보고 학습했습니다.
메인액티비티.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이 동작한다.
'Legacy' 카테고리의 다른 글
[안드로이드 스튜디오 정리#1-1] LinearLayout (0) | 2021.01.11 |
---|---|
[안드로이드 스튜디오 정리#1] Layout (0) | 2021.01.11 |
[안드로이드 스튜디오 독학#6] WebView (0) | 2021.01.08 |
[안드로이드 스튜디오 독학#5] SharedPreferences (0) | 2021.01.08 |
[안드로이드 스튜디오 독학#4] ListView (0) | 2021.01.05 |