안드로이드 스튜디오
- WebView -
어플 내에 우리가 원하는 웹을 보여주는 위젯인 WebView의 사용법을 알아보자
[ WebView ]
우선 새로운 프로젝트를 생성한 후 activity_main.xml 파일에서 레이아웃을 LinearLayout으로 변경한 다음
WebView를 생성해준다.
생성할 때 화면전체에 웹을 띄우려 할 것이기에 height값과 width값을 match_parent 로 설정해 줄 것이다.
겸사겸사 아이디값도 부여해보자.
<LinearLayout 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">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>
그러면 프리뷰화면에서 꽉 찬 웹뷰의 모습을 볼 수 있을것이다.
다음으로 MainActivity.java 파일로 넘어가서 MainActivity 클래스 안에 WebView를 선언, 띄우길 원하는 웹의 url도 선언해보자
public class MainActivity extends AppCompatActivity {
private WebView webview;
private String url = "https://www.youtube.com";
onCreate 메소드에서 WebView의 아이디를 가져오고 여러 세팅들을 설정해 줄 것이다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView)findViewById(R.id.webView);
//webView 에 대한 셋팅
// 자바스크립트를 허용해주는 세팅
webview.getSettings().setJavaScriptEnabled(true);
//url 주소를 가져오기
webview.loadUrl(url);
// 웹을 더 쾌적하게 돌리기 위한 세팅
webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClientClass());
}
webview.getSettings().setJavaScriptEnabled(boolean true); : 웹뷰에 자바스크립트 접근을 허용해주는 세팅
webview.loadUrl(String url); : url주소를 불러오는 함수
webview.setWebChromeClient(new WebChromeClient()); : 웹뷰로 띄운 웹 페이지를 컨트롤하는 함수, 크롬에 맞춰
쾌적한 환경조성을 위한 세팅으로 보면 된다.
webview.setWebViewClient(); : 페이지 컨트롤을 위한 기본적인 함수, 다양한 요청, 알림을 수신하는 기능을 한다.
그런데 여기서 setWebViewClient(new WebViewClientClass()); 하면 WebViewClientClass부분이 에러가 뜰거다.
에러가 난 부분을 클릭 후 ALT + Enter 하면 2개의 해결방안이 나올텐데
여기서는 Create inner class 라고 되어있는 해결방법을 선택해준다.
그럼 onCreate메소드 밖에 또하나의 클래스가 생성되는데
private class WebViewClientClass extends WebViewClient {
}
이 클래스 안에다가 현재 웹페이지의 url을 읽어오는 메소드를 생성해 줄 거다.
Ctrl + O 한 다음 shouldOverrideUrlLoading 이라는 메소드를 선택
private class WebViewClientClass extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
}
그 다음 view.loadUrl 구문을 shouldOverrideUrlLoading 메소드 안에 입력해준다.
그리고 return super. ~~ 되어있는 구문을 return true; 로 변경해준다.
private class WebViewClientClass extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
그리고 안드로이드 폰 내에서 뒤로가기 버튼을 눌렀을 때 웹이 뒤로 가는 모습을 봤을것이다.
이러한 기능도 직접 명령을 넣어줘야 하는데
Ctrl + O 한 뒤 onKeyDown 메소드 선택
// 안드로이드 내에서 특정 키를 누를 때 동작하는 메소드
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
onKeyDown 해석 그대로 안드로이드 내에서 특정 키를 누를 때 동작하는 메소드이다.
이제 뒤로가기 버튼을 누를 경우 웹이 뒤로간다는 기능을 추가해줘야 하므로
If 문을 사용해서 onKeyDown 메소드 내에 다음과 같이 넣어준다.
// 뒤로가기 키를 누를 때 & 웹뷰가 뒤로 갈 수 있는 상태일 때 뒤로 가라는 명령
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
단순히 if문 조건식에 keyCode == KeyEvent.KEYCODE_BACK 만 넣어준다면 웹에서 뒤로갈 페이지가 없을때
에러가 나게 될 것이다. webview.canGoBack() 은 웹이 뒤로 갈수 있는 상황이면 True를 반환하는 함수다.
if문의 조건식이 True가 되면 webview.goBack(); : 웹 뒤로가기 가 되는 것이다.
빌드를 하기 전에 가장 중요한 작업이 하나가 남았다.
바로 이 앱에 인터넷 권한을 설정해줘야 한다.
app->manifest->AndroidMenifest.xml 파일로 들어가서
<manifest xmins ~~~ 이 manifest 사이에 다음과 같이 작성해준다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.leegm.webexample">
//인터넷 접근 권한 허용
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission 까지 치면 자동완성창이 뜰텐데 INTERNET까지만 쳐도 자동으로 "android ~ INTERNET" 구문이
완성이 될 것이며 구문을 마칠 땐 꼭 />로 닫아줘야 한다.
그럼 java파일 총 코드를 올리며 마무리하겠다.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webview;
private String url = "https://www.youtube.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView)findViewById(R.id.webView);
//webView 에 대한 셋팅
// 자바스크립트를 허용해주는 세팅
webview.getSettings().setJavaScriptEnabled(true);
//url 주소를 가져오기
webview.loadUrl(url);
// 웹을 더 쾌적하게 돌리기 위한 세팅
webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClientClass());
}
// 안드로이드 내에서 특정 키를 누를 때 동작하는 메소드
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 뒤로가기 키를 누를 때 & 웹뷰가 뒤로 갈 수 있는 상태일 때 뒤로 가라는 명령
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private class WebViewClientClass extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
'안드로이드 스튜디오' 카테고리의 다른 글
실습 - 사칙연산 계산기 (0) | 2019.02.16 |
---|---|
#8 데이터값을 저장하는 SharedPreferences (0) | 2019.02.13 |
#7. 내비게이션 메뉴 커스텀 예시 (0) | 2019.02.12 |
#6 내비게이션 메뉴 (Navigation Menu) 의 구성, 틀 (0) | 2019.02.12 |
#5 리스트뷰 (ListView) (0) | 2019.02.12 |