오늘은 DrawerLayout을 통해 네비게이션 메뉴 바 를 커스텀 할 수 있도록 만들어 볼 것이다!.

 

Drawer라는 단어가 뜻하는 "서랍"이 열리고 닫히는 것처럼, DrawerLayout "평소에는 화면의 한쪽에 숨겨져 있다가 사용자가 액션을 취하면 화면에 나타나는 기능을 만들 수 있게 해주는 레이아웃"입니다.

 

하지만 DrawerLayout에 대한 설명을 보고, DrawerLayout 자체가 화면에 나타나거나 사라지는 동작을 수행하는 것으로 오해하면 안됩니다. DrawerLayout에 추가된 자식(Children)이 DrawerLayout의 영역 안에서 "Drawer(서랍)"와 같은 동작을 수행하도록 만들어주는 것이죠.

 

그리고 DrawerLayout에 추가된 모든 자식(Children)들이 Drawer로 동작하는 것이 아니라는 사실에도 주의해야 합니다. 자식(Children)들 중 layout_gravity 속성 값을 가지지 않은 자식(Child)은 기본적으로 표시되는 주화면으로 취급되고, layout_gravity 속성 값을 가진 자식(Child)만이 Drawer로써 동작하는 것이죠. 또한 Drawer가 어느 방향에서 열릴지는 layout_gravity에 지정된 값(left or right)에 의해 결정됩니다.

 

 

 

메인 액티비티 레이아웃을 설정하자!

전체 레이아웃을 DrawerLayout을 설정하고 id값을 drawer_layout으로 설정해주며 메뉴 버튼을 만들어 버튼 클릭 시 메뉴 열기 이벤트를 만들 것 이다

 

메뉴 화면 xml을 따로 만들어주어 간단하게 레이아웃을 설정하였다

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/drawer_layout">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/brn_open"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="열려라 참깨">
        </Button>

    </LinearLayout>

    
</androidx.drawerlayout.widget.DrawerLayout>

이 메인 화면에서 메뉴 바를 만들어 줄 것이다.

 

그 다음에 네비게이션 메뉴 바 레이아웃을 만들어 설정해준다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#7181D6"
    android:id="@+id/drawer">

    <Button
        android:layout_margin="10dp"
        android:id="@+id/btn_close"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메뉴 닫기"/>

    <TextView
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="종드로이드 메뉴"
        android:gravity="center"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#3BB2E7">

        <TextView
            android:layout_margin="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="테스트 메뉴"
            android:gravity="center"/>
    </LinearLayout>

</LinearLayout>

메인 화면에 이 activity_drawer xml을 보여주는 것으로 메인 화면 DrawerLayout 끝나기 전에

<include layout = "@layout/activity_drawer"/> //메인화면에 포함시켜준다
</androidx.drawerlayout.widget.DrawerLayout>

 

그러면 이렇게 파란 점선들로 포함 되어 있다는 것을 확인할 수 있다

 

이제 MainActivity.java로 가서 이벤트 처리를 해줄 것이다.

 

drawerLayout 과 drawer id 값을 넣어주고 버튼 btn_open에도 마찬가지로 넣어준다.

 

btn_open 버튼 클릭 시 drawerLayout.openDrawer(drawer); 통해 activity_drawer xml이 드로우 된다

반대로 btn_close 클릭 시 닫아주는 .closeDrawers(); 통해 닫아준다

 

그 다음 drawerLayout.setDrawerListener(listener); 을 설정해 주어야 하는데 여기서 listener를 만들어줘야 에러가 안 난다.

 

onCreate 생명주기 밖에다가 설정 해주며

 

각 메서드는 액션에서 상태값을 가져오는 것이다

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) {

            }
        };

 

View의 .setOnTouchListener을 설정해주면 터치로 메뉴를 열고 닫을 수 가 있다

 

실행하면 열기버튼 클릭 시 열리고 닫기 버튼을 누르면 닫혀지고 터치또한 잘 작동한다!!

'안드로이드 스튜디오~' 카테고리의 다른 글

Dialog (팝업창 만들기)  (0) 2019.12.29
Fragment  (0) 2019.12.28
WebView  (0) 2019.12.19
SharedPreferences  (0) 2019.12.19
ListView  (0) 2019.12.19

WebView 는 안드로이드 화면에서 자신이 원하는 인터넷 주소를 띄울 수 있는 것이다.

활용도가 매우 높고 실무에서 자주 쓰인다고 하니 기억해두자 !

 

간단하게 레이아웃을 설정해주며

WebView를 설정한다.

WebView의 id 값을 webview라고 주었다

 

MainActivity에서

 

webview 변수를 설정하고, url String 변수에 자신이 쓰고 싶은 인터넷 주소를 지정한다.

 

onCreate 생명주기

webView = (WebView)findViewById(R.id.webview); // id값을 넣어준다

 

webView.getSettings().setJavaScriptEnabled(true);

// webView Setting 해준다,

JavaScriptEnabled 자바의 부가적인 언어 허용해주는 옵션이다

 

webView.loadUrl(url); // 특정 url을 틀어주는 것

webView.setWebChromeClient(new WebChromeClient()); // 구글 크롬  브라우저에 맞춰 쾌적하게 돌리기 위함이다

webView.setWebViewClient(new WebViewClientClass()); // 일반적인 webView 클라이언트 오류 잡아야 한다!

 

 

ctrl + o 를 사용하여

onKeyDown 생명주기 // 특정 다양한 안드로이드 키들을 입력 했을떄 어떤 동작을 해줘라 라고 지정해주는 메소드이다

 

if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
} // 만약 뒤로가기 버튼을 눌렀을 떄 와 webView가 뒤로 갈 수 있게 된다면 webView를 뒤로 가게 한다.

 

 

그 다음에 WebViewClientClass 오류를 잡아줘야 한다

webView.setWebViewClient(new WebViewClientClass())

WebViewClientClass 클래스를 만들고

ctrl + o 를 사용하여 shouldOverrideUrlLoading 메소드를 생성한다 

 

shouldOverrideUrlLoading 메소드는 현재 페이지에 url을 읽어올 수 있는 이 메소드를 이용해서 새 창을 읽을 수 있고 특정 페이지에서 특정 기능을 넣을 수가 있는 메소드이다

view.loadURL(url); 

리턴 값은 true로 해준다.

 

실행하기 전에 인터넷 권한을 설정해줘야 합니다.

Manifests의 AndroidManifest.xml 에 작성한다

 

 

만약

ERR_NAME_NOT_RESOLVED 에러 뜨면 manifest.xml 파일 안에서 <application> 안에 android:usesCleartextTraffic="true" 추가해주시면 동작합니다!

 

실행 화면

 

'안드로이드 스튜디오~' 카테고리의 다른 글

Fragment  (0) 2019.12.28
DrawerLayout  (0) 2019.12.26
SharedPreferences  (0) 2019.12.19
ListView  (0) 2019.12.19
ImageView & Toast  (0) 2019.12.19

SharedPreferences 란 안드로이드 앱을 사용하다가 종료하고 재실행 하였을 때 남는 데이터 값이나 저장되어야 할 값들  남길 떄 사용한다

 

간단하게 EditText를 만들어 SharedPreferences 사용해보자

 

EditText를 만들어 id 값을 et_save 로 설정해준다

 

MainActivity로 가서

 

EditText et_save; // EditText 변수 et_save 설정한다.

String shared;// String 변수 shared 설정한다.

 

onCreate 생명주기에

 

et_save = (EditText)FindViewById(R.id.et_save); // et_save에 id값을 넣어준다.

 

SharedPreferences sharedPreferences = getSharedPreferences(shared,0); //SharedPreferences 선언

 

앱을 실행하였을 떄 EditText가 뜨게 될거고 안드로이드에서 문자를 입력하고 뒤로가기 버튼을 누르고 다시 켜도

문자가 남아있어야 하므로

 

 

onDestroy 생명주기

ctrl + o 를 누르고 onDestroy 생명주기를 만들어 준다. // 액티비티를 벗어났을 떄 호출된다

 

 

String value = et_save.getText().toString(); // EditText에 현재 쓰여져 있는 값을 문자열 형태로 가져온다.

editor.putString("jong",value); // 첫 번쨰 인자는 별명, 두 번쨰 인자는 값

editor.commit(); // 실질적인 save

 

앱 재실행 시

String value = sharedPreferences.getString("jong",""); // 첫 번쨰 인자 별명 두 번쨰 인자는 꺼내오는 것이므로 빈값을 입력 해야한다.

et_save.setText(value); //  value의  String 값을 설정해준다.

 

실행 화면 시

문자 입력

뒤로 가기로 앱을 나가고 재실행 시

이렇게 임시 저장 하는 법을 배웠다!!

 

단 앱을 삭제할 시에는 모두 사라진다.

'안드로이드 스튜디오~' 카테고리의 다른 글

Fragment  (0) 2019.12.28
DrawerLayout  (0) 2019.12.26
WebView  (0) 2019.12.19
ListView  (0) 2019.12.19
ImageView & Toast  (0) 2019.12.19

 

ListView 안에 id 값을 list_test로 부여하고

 

MainActivity

 

private ListView list; // list 변수를 선언한다

 

list = (ListView)findViewById(R.id.list_test); // list 변수에 list_test id 값을 넣어준다

 

List<String> data = new ArrayList<>(); // 배열 안에다가 String 형식으로 데이터를 저장한다

 

ListView와 list 를 연결해주는 Adapter 가 있다

 

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);

첫번째 인자 this는 현재 액티비티에 해당되고, 두번쨰 인자는 안드로이드에서 제공하는 기본 폼이다

세번쨰 인자로는 선언해 주었던 data를 넣어준다

 

list.setAdapter(adapter); // adapter를 list에다가 셋팅한다.

 

data.add(""); // 원하는 문자열을 추가한다

 

adapter.notifyDataSetChanged();// 이 상태를 저장 하겠다는 의미이다.

 

빌드를 하면

 화면에 잘 나온다 !!

'안드로이드 스튜디오~' 카테고리의 다른 글

Fragment  (0) 2019.12.28
DrawerLayout  (0) 2019.12.26
WebView  (0) 2019.12.19
SharedPreferences  (0) 2019.12.19
ImageView & Toast  (0) 2019.12.19

ImageView와 Toast메시지 띄우는 방법을 공부해보자!..

 

먼저 ImageView 사용방법은

 

android:src="" 는 링크를 뜻하며 이미지가 있는 곳을 지정해 준다!

@mipmap 이나 drawable은  이미지가 들어있는 폴더인데 mipmap은 앱 아이콘 같은 이미지를 모아두는 곳이다.

그러면 이렇게 이미지가 나타난다

 

ImageView에 id값을 image_test 로 주고 이미지를 클릭 하였을 때 토스트 메시지를 띄어볼 것이다

 

MainActivity 로 가서 

 

ImageView image_test;  // image_test 변수를 생성하고

 

onCreate 메소드 안에

image_test = (ImageView)findViewById(R.id.image_test); // image_test 변수에 ImageView 아이디 값을 넣어준다

 

 

 

이미지를 클릭하였을 떄 Toast 메시지를 띄우는 방법이다

getApplicationContext() // 본인의 메인 액티비티를 뜻하는 것이며

"안녕 안녕" 송출 할 메시지를 써주고

Toast.LENGTH_SHORT // 시간초를 설정하고 마지막에 .show(); 하면 된다

 

이렇게 하면 이미지 클릭 시 "안녕 안녕" 이라는 Toast 메시지가 출력된다!

'안드로이드 스튜디오~' 카테고리의 다른 글

Fragment  (0) 2019.12.28
DrawerLayout  (0) 2019.12.26
WebView  (0) 2019.12.19
SharedPreferences  (0) 2019.12.19
ListView  (0) 2019.12.19

+ Recent posts