1. SharedPreferences
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
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
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를 반환하도록 코드를 짰는지에 대해서는 잘 모르겠다.
'Android App' 카테고리의 다른 글
Fragment 전환 in Android Studio (0) | 2021.08.02 |
---|---|
recyclerView in Android Studio (0) | 2021.08.02 |
camera, startActivityForResult() 대체, intent.resolveActivity(getPackageManager()) return null in Android Studio (0) | 2021.08.02 |
webViewWithEditText in Android Studio (0) | 2021.08.02 |
Fragment 전환, layout, activity 전환 in Android Studio (0) | 2021.07.13 |