![[Android]버튼으로 웹사이트 이동하기, 웹브라우저 만들기 및 화면 바꾸기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXl2Db%2FbtqY7pAKxsh%2F7zpGXBuYXjsmKcC6e4hOT1%2Fimg.png)
ㅡ 들어가는 글 ㅡ
버튼을 통해서 할 수 있는 기능들은 상당히 다양합니다.
이번에 실습 할 기능들은 버튼을 눌러서 화면을 전환하는 것 입니다.
이를 통해, 레이아웃의 개념을 이해해보도록 하겠습니다.
추가로 웹사이트로 이동하는 기능과 내부에 브라우저를 만들어서 이용해보도록 하겠습니다.
ㅡ 목표 ㅡ
Intent 객체를 통해 레이아웃을 이동해보기
web의 기능들을 이용해서 내부에 브라우저를 생성해보기
- 화면 이동하기
우선, activity_main.xml 파일에 누를 버튼을 생성합니다. id는 button4, button5로 하겠습니다.
그리고 layout안에 activity_one.xml 과 activity_two.xml 을 생성합니다.
레이아웃을 이렇게 생성해 주고 기능을 넣어주기 위하여 java/com.example.sample5_1로 이동하겠습니다.
안에는 이전에 만들었던 MainActivity.java가 존재합니다.
onCreate메소드 안에 다음과 같은 코드를 추가합니다.
Button btn1 = (Button) findViewById(R.id.button4);
Button btn2 = (Button) findViewById(R.id.button5);
btn1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(MainActivity.this, Oneactivity. class);
startActivity(intent);
}
});
btn2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(MainActivity.this, Twoactivity. class); // main에서 two로 이동
startActivity(intent);
}
});
버튼의 객체를 생성해주고 각각의 버튼에 기능을 넣어줬습니다.
Intent란 메세징 객체로 작업을 요청하는 기능을 갖고 있습니다.
Intent의 첫번째 매개변수에서 두번째 매개변수로 이동하는 모습을 확인 할 수 있습니다.
이동을 했으면 다시 돌아오는 기능도 필요합니다.
layout안에 activity_one.xml과 activtiy_two.xml파일을 생성하고 텍스트와 버튼을 생성합니다.
텍스트에는 여기가 어떤 파일인지 알려주기 위해 one에는 ONE, two에는 TWO라고 적었습니다.
버튼에 다시 돌아가는 기능을 만들어 주기 위해서, com.example.sample5_1안에
Oneactivity.java와 Twoactivity.java를 생성합니다. 그리고 각각의 파일에 맞춰서 다음과 같이 코드를 작성합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
Button button = (Button) findViewById(R.id.two_to_home);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
finish();
}
});
}
이것은 Twoactivity.java의 코드 일부입니다.
마찬가지로 버튼의 객체를 생성한 뒤, finish()함수를 실행해서 뒤로 돌아가는 것입니다.
책을 보며 따라가고 있는 수준이라 정확하게 이해는 못하고 있지만, C언어의 return 0; 와 같은 역할을 하는 것 같습니다.
- 버튼을 눌렀을 때 특정 웹사이트로 이동하기
어플들을 사용하다 보면 버튼을 눌렀을 때, 특정 웹사이트로 이동하는 경우가 많이 있습니다.
마찬가지로 activity_main.xml 파일에 버튼을 생성하고 id는 button2로 하겠습니다.
MainActivity.java 로 이동해서 버튼에 기능을 만들어보도록 하겠습니다.
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"));
startActivity(myIntent);
}
});
여기서도 Intent 객체를 사용하는 것을 알 수 있습니다. Uri.parse안에 있는 URL로 이동합니다.
Url이 아닌 Uri로 사용하는지 궁금해서 찾아봤습니다.
- URI : 통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다. URI의 하위개념으로 URL, URN 이 있다
- URL : URL(Uniform Resource Locator, 문화어: 파일식별자, 유일자원지시기)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다.
- URN : URN(Uniform Resource Name, 통합 자원 이름)은 urn:scheme 을 사용하는 URI를 위한 역사적인 이름이다. URN은 영속적이고, 위치에 독립적인 자원을 위한 지시자로 사용하기 위해 1997년도 RFC 2141 문서에서 정의되었다.
자원의 URI(식별자), URL(위치), URN(이름)으로 어느정도 예상해 볼 수 있습니다.
URI는 URL의 상위개념입니다. URI는 식별자만 구분하고, 그 위치는 URL로 확인 할 수 있음을 알 수 있었습니다.
- 웹뷰를 이용하여 간단한 브라우저 만들기
위에서 해본 것은 버튼을 누르면 새로운 창을 만들어서 해당 URL로 이동하는 기능이었습니다.
이번에 해볼 것은 새로운 창을 만들지 않고, 화면 위에 브라우저를 띄우는 것입니다.
activity_main.xml의 design을 보면, 팔레트가 있습니다.
여태 이 팔레트에서 버튼을 가져와서 사용했었는데요. 다양한 기능들이 있지만, 밑에 보면 webview가 있습니다.
이 webview를 가져와서 사이즈를 조절하고 id를 web1로 사용하겠습니다.
웹뷰를 띄우면 뒤로가거나 새로고침을 하는 등의 버튼이 또 필요합니다.
이번에는 뒤로가기, 앞으로가기, 새로고침을 위한 버튼을 만들어서 각각 btn_go, btn_reload, btn_back으로 id를 줍니다.
다시 MainActivity.java에 가서 버튼에 기능을 넣고 웹뷰에 띄울 브라우저를 설정해주도록 하겠습니다.
WebView web;
web = (WebView) this.findViewById(R.id.web1);
web.getSettings().setJavaScriptEnabled(true);
web.setWebViewClient(new WebViewClient());
web.loadUrl("http://m.daum.net");
Button btn_go = (Button) findViewById(R.id.btn_go);
Button btn_reload = (Button) findViewById(R.id.btn_reload);
Button btn_back = (Button) findViewById(R.id.btn_back);
btn_go.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
web.goForward();
}
});
btn_reload.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
web.reload();
}
});
btn_back.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
web.goBack();
}
});
버튼은 여태껏 해온 것과 비슷한 형태를 띕니다. 버튼 객체를 생성하고, web에 있는 기능들을 사용합니다.
웹뷰의 경우 웹뷰 객체를 생성하고 서버와 통신하기 위해 웹뷰클라이언트를 설정한 후 url을 로드합니다.
이렇게 하면 웹뷰를 띄울 수 있을까요? 그렇지 않습니다.
웹뷰를 띄우는 것은 인터넷을 사용해야하는데 이를 위해서 퍼미션이 필요합니다.
manifests/AndroidManifest.xml 파일에 다음과 같은 코드를 추가합니다.
<uses-permission android:name="android.permission.INTERNET"/>
웹 브라우저 사용을 위한 퍼미션을 주었습니다.
사실 이렇게 하면되는데 저같은 경우에는 에러가 발생했습니다.
[ERROR:gl_surface_egl.cc(289)] eglChooseConfig failed with error EGL_SUCCESS
와 같은 에러가 발생합니다.
구글링해서 찾아본 결과 AVD에서 간혹 발생하는 에러라고 했고 코드상에는 문제가 없다고 합니다.
해결을 위해 이래저래 노력을 해봤으나 문제는 없으나 AVD의 문제라고 결론을 내렸습니다.
MainActivity.java의 2번째 행을 보면 web.getSettings().setJavaScriptEnabled(true); 라는 코드가 있습니다.
이것도 자바스크립트의 코드가 override가 가능하도록 세팅해주는 코드를 제가 추가한 것입니다.
xml파일에서 webview를 전체화면에 띄우도록(fill_parent) 설정하고 하면 간혹 되기는 했으나 제가 원한 기능은 아닙니다. 계속 찾고 해결하다보면 할 수 있겠지만, 앞으로 더 공부해가면서 더 익숙해졌을 때 하는 것이 효율적이라고 생각하여 일단은 넘어갔습니다. 무작정 잡고만 있는 것도 비효율적이기 때문입니다.
간단한 기능들이지만 계속 따라가면서 안드로이드 스튜디오에 점점 적응하고 있습니다.
'개발 > 안드로이드' 카테고리의 다른 글
[Android]누르면 알림을 띄우는 버튼을 만들어보자! (0) | 2021.02.25 |
---|---|
프론트엔드의 기초 시작! (0) | 2021.02.25 |