웹뷰는 앱 안에 웹페이지를 부분화면으로 보여줄 때 사용한다. 인텐트를 통해 웹 브라우저를 띄우는 것과 다르게 부분화면에 웹페이지를 보여줌으로써 웹페이지가 앱의 일부분이 된 것같은 자연스러운 느낌을 준다.
웹뷰를 사용하면 인터넷에 접속하게 되므로 매니페스트 파일에 인터넷 권한을 등록해줘야한다.
<uses-permission android:name="android.permission.INTERNET"/>
웹뷰는 XML 레이아웃에서 <WebView\> 태그를 사용해 추가할 수 있다. 그럼 웹뷰를 사용해 앱 내에서 웹피이지를 볼 수 있는 앱을 만들어보자.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/urlInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:hint="url을 입력하세요"/>
<Button
android:id="@+id/loadButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="열기"
android:padding="4dp"
android:textSize="20dp"/>
</LinearLayout>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="10dp">
</WebView>
</LinearLayout>
웹페이지 URL을 입력할 수 있는 입력상자하나와 클릭하면 해당 사이트로 이동하는 버튼을 하나 만들었다. 이제 자바 소스코드를 통해서 이 기능들을 만들어보자.
package io.swnomad.samplewebview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
WebView webView;
EditText urlInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings(); //웹뷰 설정 정보 가져오기
webSettings.setJavaScriptEnabled(true); //자바스크림트 허용
webSettings.setLoadWithOverviewMode(true); //컨텐츠가 웹뷰 사이즈를 넘어갈 경우 스크린 크기에 맞춤
webView.setWebChromeClient(new WebChromeClient()); //웹뷰에서 크롬 실행 가능하도록 추가
webView.setWebViewClient(new MyWebViewClient());
urlInput = findViewById(R.id.urlInput);
Button loadButton = findViewById(R.id.loadButton);
loadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = urlInput.getText().toString();
if(!url.contains("https://") && !url.contains("http://")){
url = "https://"+url;
}
webView.loadUrl(url); //웹뷰에 웹페이지 로드
}
});
}
}
/* 새 창이 아닌 앱 안에서 웹페이지를 띄우기 위해 WebViewClient 상속받은 클래스를 정의하고
* shouldOverrideUrlLoading() 메소드를 재정의해준다. */
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
먼저 findViewById()
메소드를 통해 웹뷰를 참조하였다. 그리고 웹뷰에서 getSettings()
메소드를 호출하여 웹뷰의 설정을 가져와 webSettings 변수로 참조하였다. 이 변수를 통해서 자바스크립트를 허용하고 컨텐츠가 웹뷰 사이즈를 넘어갈 경우 자동으로 맞추도록 하였다. 참고로 요새는 대부분의 사이트에서 자바스크립트를 사용하므로 이 설정은 꼭 하는 것이 좋다.
웹뷰에 설정한 MyWebViewClient 클래스는 WebViewClient 클래스를 상속하고 shouldOverrideUrlLoading()
메소드를 재정의하여 앱 내에서 웹페이지를 불러올 수 있도록 하였다. 이 설정을 하지 않으면 버튼을 클릭했을때 웹 브라우저를 실행하게 된다.
앱을 실행하면 다음의 화면을 볼 수 있다.
'안드로이드' 카테고리의 다른 글
(안드로이드) 36 - 비트맵(Bitmap) 버튼 (0) | 2020.05.19 |
---|---|
(안드로이드) 35 - 나인패치(9-Patch) 이미지 (0) | 2020.05.18 |
(안드로이드) 33 - 탭(Tab) (0) | 2020.05.18 |
(안드로이드) 32 - 액션바(ActionBar) (0) | 2020.05.18 |
(안드로이드) 31 - 프래그먼트 수명주기(Fragment LifeCycle) (0) | 2020.05.18 |