웹브라우저를 앱 안에 넣을 때는 웹뷰(WebView)를 사용하면 된다.
XML 레이아웃에선 <WebView>
태그로 정의한다.
웹뷰를 정의하여 사용할 때는 인터넷에 접속하게 되므로 항상 매니페이스에 인터넷 접속 권한이 등록되어 있어야 한다
<uses-permission android:name="android.permission.INTERNET" />
activity_main.xml 파일을 수정한다.
버튼과 입력상자, 그리고 웹뷰가 들어가도록 만들었다.
MainActivity.java에 코드를 작성했다.
public class MainActivity extends AppCompatActivity {
EditText editText;
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new ViewClient());
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl(editText.getText().toString());
}
});
}
private class ViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
WebView 객체의 getSettings 메소드를 사용해 webSettings 메소드를 참조한다.
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
이 설정한 설정 정보 중에 setJavaScriptEnable을 true로 설정하여 자바스크립트가 동작할 수 있는 환경으로 하였다.
화면에 추가된 webView 객체에 웹페이지를 보여주기 위해서는 WebViewClient를 상속한 객체를 만들어 WebView에 설장해야 한다.
webView.setWebViewClient(new ViewClient());
...
private class ViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
웹페이지를 로딩하여 화면에 보여주기 위해서는 loadUrl 메소드를 사용한다.
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl(editText.getText().toString());
}
});
이 메소드를 사용하면 원격지의 웹페이지를 열겨나 로컬에 저장된 HTML 파일을 열 수 있다.
앱을 실행하려면 권한을 설정해야 하므로 AnroidManifest.xml 파일에 권한을 추가한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.techtown.web">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:usesCleartextTraffic="true"
...
<uses-permission android:name="android.permission.INTERNET" />
로 INTERNET 권한을 추가하였다.
또한 <application>
태그 안에 usesClientTraffic 속성을 추가해 true로 설장하였다.