일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 가상화
- 갤럭시탭S8울트라
- 패턴 인식
- 파이썬
- 하이퍼바이저
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레자동세척로봇청소기
- Google App Engine
- hopfield network
- 신경회로망
- NarwalFreo
- Friendship
- 빅데이터
- 구글 앱 엔진
- Bidirectional Associative Memory
- 패턴인식
- 고려대학교
- 삼성
- BAM
- 인공지능
- 증강현실
- 신경망
- 멤버십
- 삼성소프트웨어멤버십
- Python
- SSM
- 나르왈프레오
- 동아리
- Neural Network
- 물걸레로봇청소기추천
- Today
- Total
정보공간_1
[3기 강남 백정의] Android Web View에 관하여. 본문
안드로이드 앱 개발시에 웹뷰를 사용하여 개발할 때 오픈 된 라이브러리를 사용하지 않고 안드로이드 라이브러리를 가지고 연동하는 방법과 웹뷰의 HTML과 CSS에 대해 소개해 보겠습니다.
웹뷰는 특정상황의 앱을 제작하는데 적합한데 간단한 특징으로는 User의 이벤트를 모두 Web View를 통해 받고, Front단 모든 로직이 JavaScript HTML로 가능하기 때문에 API 데이터의 변경이나 다른 API로 대체가 매우 용이합니다. 레이아웃과 디자인, 이벤트에 대한 반응 모두 Web기반이므로 콘텐츠 추가나 디자인 변경에 유연하게 대응할 수 있습니다.
웹뷰와 연동하는 방법은 안드로이드와 자바스크립트 간에 서로 function을 호출하는 방식으로 합니다.
다음과 같은 방식으로 안드로이드와 자바스크립트 사이에 세팅을 해둡니다. 중간에서 연동을 담당하는 내부
프레임웍을 만들지 않는다면 첫번째 인자를 Token으로 해서 안드로이드에서 분기가 되도록 합니다.
기본적으로 연동을 할 경우 자바스크립트의 alert function을 호출할 수 없기 때문에 다음과 같이 안드로이드에서
alert function을 대체하여 안드로이드의 dialog를 띄워주도록 합니다.
웹뷰에서 기존의 웹브라우저와 다른점을 몇가지 보면
- Position: fixed; position 속성을 fixed로 설정 하였을 때, 레이어의 우선순위(Depth)부분이 오류가 발생하는
경우가 생긴다. fixed는 최대한 피하고 absolute를 활용합니다.
- 페이지의 Depth가 깊어지고, Child tag가 많아질 경우 웹 뷰에서 이벤트를 인식하지만 화면에 바로 나타내지
못하는 버그가 생깁니다.
안드로이드 웹뷰 테스트 전에 브라우저에서 영역이 제대로 잡히는지 확인하도록 합니다.
중첩되는 Position 속성을 피하고 해결되지 않는다면 이벤트를 받을 대상에만 Position속성을 주도록 합니다.
- Body나 HTML에서 overflow:hidden을 주고 특정 div태그에서 스크롤을 줄 경우 화면이 잘리거나 스크롤을
올려도 제대로 표시되지 않는 컨텐츠가 발생 할 경우에는 Global 이벤트를 주어서 다음과 같이 해결합니다.
webview.invalidate();
- Position: relative; child tag에 postion 속성에 absolute나 relative를 적용했을 경우 감싸는 클래스에
relative를 적용해야 영역이 의도한대로 개발이 가능합니다. 화면에서 이벤트를 감지하지 못할 경우 Z-index로
해결 할 수 있지만 너무 많이 사용 할 경우 레이어 depth의 오류가 발생합니다.
- 태그의 순서와 Table 등의 태그를 활용하여 Z-index를 줄입니다.
- 최적화된 화면을 위해 화면 해상도의 경우 meta태그를 이용하여 device-width에 맞추고 비율을
1.0으로 고정시킵니다.
<link rel="stylesheet" href="css/common.css" media="screen" />
<link rel="stylesheet" href="css/iphone4s.css" media="only screen and (device-width:320px)
and (device-height:480px)" />
<link rel="stylesheet" href="css/ipad_1.css" media="only screen and (device-width:768px)
and (device- height:1024px)" />
<link rel="stylesheet" href="css/galaxy_note.css" media="only screen and (device-width:800px)
and (device-height:1280px)" />
웹 뷰를 레이아웃으로 사용하였으므로 SNS연동은 안드로이드에서 담당하게 되고 Facebook안드로이드 SDK
설치 뒤 웹뷰와 통신을 주고 받도록 합니다. 웹뷰와 연동 시에 MainActivity에서 Facebook 제공 API 의
Function을 호출하도록 합니다.
로그인 상태 저장 및 아이디 비번 관리는 Facebook sdk로 관리가 가능하므로 따로 그 정보만을 저장하는
DB나 Table을 만들지 않습니다.
사진이나 정보가 Facebook에 업로드 될 때 인코딩 등에 코드가 필요없으며 로딩 또한 API를 활용합니다.
로딩 시나 로딩 완료 후에 호출되는 Callback function 이 존재합니다.
Facebook API를 활용하여 이미지를 전송 할 때 외부 이미지의 경우 파일을 저장한뒤 전송하는 function을
활용하고 이미 촬영한 이미지의 경우 내부 메모리에 저장되어 있으므로 전송하는 function만 활용합니다.
출처 : 본인 제작
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[3기 신촌 윤기백] Wireless Sensor Network에 대해서 (0) | 2013.03.11 |
---|---|
[3기 강남 이소영] Photoshop/illustrator 유용한 단축키 (0) | 2013.03.07 |
[3기 대전 김재원] Linux Kernel Debugging - Dynamic Probes(3) (0) | 2013.03.05 |
[3기 강북 김승현] ffmpeg 를 이용한 간단한 동영상 플레이어 제작 #1 (0) | 2013.03.05 |
[3기 전주 전환규] Design Compiler를 이용한 Synthesis (1) | 2013.03.02 |