Android App

sharedPreferences, webView, Navigation in Android Studio

YunSeong 2021. 7. 19. 23:13
728x90
반응형

1. SharedPreferences

https://youtu.be/-2QPmS4OWos

SharedPreferences는 앱을 끄고 다시 키더라고 정보가 남아있도록 정보를 저장할 수 있는 것이다.

 

이것을 사용하는 방법은 

 

1
2
3
4
5
6
SharedPreferences sharedPreferences = getSharedPreferences(String fileName, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
 
editor.putString("mandu", value);
 
editor.commit;
cs

위와 같이 SharedPreferences를 getSharedPreferences로 받아와야 한다. 그 parameter은 정확하지는

않을 수 있지만 첫 번째는 정보를 저장할 xml파일의 이름 같고 두 번째는 저장하는 방식에 대한 선택인 것 같다.

 

그리고 정보를 저장하기 위해서는 SharedPreferences.Editor 또한 필요하기에 sharedPreferences.edit()을 이용해서 받아 화 야한다. 그리고 그 editor.putString()을 이용해서 첫 번째 parameter인 "mandu"라는 이름으로 두 번째 parameter인 value를 저장할 수 있다. 이때 이름을 이용해서 나중에 저장된 정보를 반환받을 수 있다. 

 

그리고 value의 변수 형태에 따라서 

putString()

putBoolean()

putFloat()

putInt()

putLong()

putStringSet() 등의 method로 저장할 수 있다. 

 

그리고 editor.commit을 이용해서 변경사항을 저장할 수 있다. (중요)

 

 

 

 

 

1
2
SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
String value = sharedPreferences.getString("mandu", "");
cs

정보를 가져오기 위해서는 위와 같이 또 SharedPreferences가 필요하다. 저장할 때와 마찬가지로 getSharedPreferences()을 이용해서 얻고 

getString("mandu", "")를 이용해서 "mandu"라는 이름으로 저장된 정보를 반환하도록 할 수 있다. 

 

정보를 불러올 때 또한 변수의 형태에 따라서 

getBoolean()

getFloat()

getInt()

getLong()

getString()

getStringSet() 등의 method를 이용해야 한다. 

 

 

1
2
3
4
@Override
protected void onDestroy() {
    super.onDestroy();
}
cs

보통 activity가 닫힐 때 SharedPreferences를 이용해서 정보를 저장해야 하는 듯하다. 그렇기에 

activity가 닫힐 때 호출되는 onDestroy() 안에서 저장하는 것이 좋을 것이다. 

 

 


2. webView

https://youtu.be/S4kd9OPzcf0

webView를 이용해서 webPage를 띄울 수 있다.

 

 먼저 1열과 같이 activity에 만든 webView를 가져오고 

1
2
3
4
5
6
7
8
webView = (WebView)findViewById(R.id.webView);
 
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
 
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
 
cs

getSettings().setJavaScriptEnabled(true)를 통해서 javaScript로 구현된 것들을 제대로 구현이 되도록 하는 것 같다. 

 

그리고 loadUrl(url)을 통해서 url에 해당하는 웹페이지를 불러올 수 있다. 

 

6열에 의하여 chrome을 기반으로 사용해서 성능을 향상할 수 있고 호환성 또한 개선할 수 있다. 

 

 

그리고 7열은 주석처리를 해보면서 실험해본 결과 웹페이지에서 다른 url을 받아와서 실행할 때 다른 브라우저에서 여는 것이 아니라 지금 만드는 안드로이드 앱 안에서 열게하는 역할을 하는듯하다. 사실 이 식의 역할에 대한 것은 잘 모르겠다. 

 

 

 

 

하지만 이렇게만 한다면 internet과 연결이 안 되있기 때문에 webPage가 뜨지 않을 것이다. 이것을 해결하기 위해서는 

app\manifests\AndroidManifest.xml에 

 

1
<uses-permission android:name="android.permission.INTERNET"/>
cs

위와 같은 줄을 입력해주면 제대로 실행될 것이다.

 

 

 

1
2
3
4
5
6
7
8
9
10
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 
    if ((keyCode == KeyEvent.KEYCODE_BACK)&&webView.canGoBack() ) {
        webView.goBack();
        return true;
    }
 
    return super.onKeyDown(keyCode, event);
}
cs

어떤 입력이 올 때 위 함수가 호출되고 그 입력의 종류가 KEYCODE_BACK이고 webView.canGoBack()으로 뒤로가기를 할 수 있는 상태인지를 확인한 후에 webView.goBack()을 통해서 webView에서 뒤로가기를 할 수 있도록 했다. 

 

 

 


3. Navigation

https://youtu.be/p4Np2ks6bW4

drawerLayout은 drawer이 서랍이란 뜻이기에 서랍처럼 열리는 듯이 drawerView를 activity위에 띄울 수 있는 layout이다. 

이것을 사용하기 위해서는 drawerLayout인 activity를 만들고 id또한 만들어줘야하고 그 activity에 곂쳐서 열 drawerView또한 만들어야한다. 이때 drawerView는 layout_width를 match_parent로 만든다면 그 activity를 완전히 덮을 것이기 때문에 따로 크기를 정해서 설정하는 것이 좋아보인다. 

 

 

 

 

그리고 View를 activity에 포함시켜줘야하기 때문에

1
<include layout="@layout/drawerViewName"/>
cs

위와 같은 코드를 activity의 xml파일에 적어줘서 drawerLayout인 activity가 drawerView를 포함하도록해야한다. 

 

 

 

 

 

그리고 어느방향에서 drawerView가 나올지도 작성을 해줘야한다. 

1
android:layout_gravity="start"
cs

위와 같은 코드를 drawerView의 xml파일의 layout 괄호 안에 적어줘서 

start (왼쪽)

end (오른쪽)

top (위)

botton (아래) 쪽에서 나오도록 해줄 수 있다. 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DrawerLayout drawerLayout = (DrawerLayout)findViewById(R.id.drawerLayoutID);
View drawerView = (View)findViewById(R.id.drawerViewID);
 
buttonClose.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        drawerLayout.closeDrawers();
    }
});
 
 
buttonOpen.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        drawerLayout.openDrawer(drawerView);
    }
});
cs

1, 2에서 DrawerLayout과 View를 java파일에 가져왔다. 

4, 12에서 버튼에 입력에 호출 받는 함수를 만들어서

drawerLayout.closeDrawers() 를 이용해서 모든 Drawer들을 닫게 만들었고 

drawerLayout.openDrawer(drawerView) 을 이용해서 위에서 가져왔던 drawerView를 열도록했다.   

 

 

 

 

 

 그리고 drawerLayout을 사용할 때 drawerView가 슬라이드 될 때, 열렸을 때 닫혔을 때 변화가 있을 때 각각의 상황에 실행시키고 싶은 것이 있다면 

1
drawerLayout.setDrawerListener(listener);
cs

위와 같은 코드를 실행부에 입력해서 listener을 생성하고 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DrawerLayout.DrawerListener listener = new DrawerLayout.DrawerListener() {
    @Override
    public void onDrawerSlide(@NonNull @org.jetbrains.annotations.NotNull View drawerView, float slideOffset) {
 
    }
 
    @Override
    public void onDrawerOpened(@NonNull @org.jetbrains.annotations.NotNull View drawerView) {
 
    }
 
    @Override
    public void onDrawerClosed(@NonNull @org.jetbrains.annotations.NotNull View drawerView) {
 
    }
 
    @Override
    public void onDrawerStateChanged(int newState) {
 
    }
};
cs

위와 같이 listener을 정의한다면 drawerLayout을 사용할 때 나올 수 있는 각각의 상황에 원하는 것을 실행할 수 있게된다.  

 

 

 

그리고 위 유튜브 강의에서는 

1
2
3
4
5
6
drawerView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return true;
    }
});
cs

위와 같은 부분을 추가적으로 적는데 구글링을 해보니깐 터치가 감지됐을 때 호출되는 함수인 것 같은데 왜 터치가 감지됐을 때 true를 반환하도록 코드를 짰는지에 대해서는 잘 모르겠다. 

728x90
반응형