본문 바로가기

모바일프로그래밍/Android

WebView 안의 콘텐츠(이미지, 동영상) 폰 화면에 맞추기 WebView 사용시 안에 들어있는 이미지나 동영상 등의 크기를 폰의 해상도에 정확히 맞추어 보여주길 바랄 때가 많은데요 이를 위해서는 코드 하나만 추가해주면 됩니다. webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 위와 같이 WebView에 LayoutAlgorithm만 지정해주면 글자크기는 그대로 유지하면서 이미지나 동영상의 크기만 폰의 해상도에 딱맞게 조절되어 표시됩니다. 이것 땜에 며칠을 고생했는데 굉장히 단순한 방법이 있었네요..;; 한국어 웹페이지만 찾아봤던게 잘못이었어요..ㅠㅠ 앞으로는 영어페이지를 위주로 봐야할 거 같습니다. 안드로이드 개발 관련 국내 사이트들은 질문 올려도 답변도 잘 안달리고 태도들도 다들 .. 더보기
Android Compile시 string.xml 관련 is not translated in ... Lint 에러 해결 방법 정확한 이유는 모르겠는데 최근에 안드로이드 프로젝트를 apk파일로 컴파일하려고 하니 string.xml 관련하여 Lint 에러가 발생하면서 컴파일이 되지 않더군요. 다국어지원 관련한 오류인 듯 한데 에러를 없앨 수가 없더라구요.. 개발하면서는 아무런 오류가 없었는데 말이죠.. 이런 경우 아주 간단한 해결방법은 Lint 에러를 warning으로 바꾸어 주는 것입니다. Lint 관련 설정은 이클립스 메뉴의 Window - Preference - Android - Lint 에서 변경할 수 있는데요.. 여기서 MissingTranslation 항목을 찾아 Severity를 warning으로 변경하면 됩니다. 더보기
WebView에서 동영상 재생시 전체화면모드에서 발생하는 오류 해결법 안드로이드 4.0 이후에서는 WebView에서 유튜브나 플래시 동영상의 전체화면 모드 사용시 NullPointerException이 발생합니다. 이를 해결하기 위해서는 WebView에 WebChromeClient 를 설정해주어야 합니다. 하지만 단순히 기본 WebChromeClient 객체를 생성하여 WebView에 설정할 경우 오류는 발생하지 않지만 영상이 정상적으로 재생이 안되는 문제가 있습니다. 전체화면 모드가 제대로 작동되게 하려면 아래와 같이 WebChromeClient 클래스를 상속받은 클래스를 만든 후 이를 WebView에 설정하면 됩니다. public class FullscreenableChromeClient extends WebChromeClient { protected Activity .. 더보기
안드로이드 레이아웃 작업 시 기본 룰 안드로이드 기기는 다양한 해상도를 가지고 있기 때문에 안드로이드 앱 개발에 있어 해상도에 따른 레이아웃 구현은 상당히 까다로운 문제인데요, 여러 해상도에 대응하기 위해 레이아웃 작업 시 아래와 같은 기본 룰을 지켜는 것이 좋다고 하네요. 1. 레이아웃 디자인시에는 HVGA 기본 스크린 사이즈를 중심으로 DIP 단위만을 사용해서 디자인합니다. px과 dip가 1:1 이라서 화면 크기에 대응하여 사이즈 결정하기가 좋습니다. 320 * 480 화면 기준으로 들어갈 이미지나 UI 요소들 각각의 가로 사이즈를 px로 계산한 후 코딩시에는 그 값의 단위를 dip 로만 입력하 면 됩니다 . 2. AbsoluteLayout 을 사용하지 않습니다. 즉 , 화면의 절대 좌표 보다는 상대 좌표를 사용해야 합니다. 이거 사용.. 더보기
해상도에 따른 레이아웃 폴더와, 이미지 폴더 분기 해상도에 따라 참고할 Layout, Drawable 폴더를 다르게 하기 위해서는 res 폴더내에 아래와 같은 이름으로 폴더를 생성하시면 됩니다. drawable-1280x720 layout-1280x720 위와 같은 폴더를 res 폴더에 생성했을 경우 해상도가 1280x720인 폰에서는 위의 폴더에 있는 layout xml파일과 이미지 파일을 참고하여 화면을 구현하게 됩니다. 출처 : 안드로이드펍, 보리 & 마고 블로그 더보기
Target, minSdkVersion Target은 사용할 컴파일러의 버전을 의미하고 minSdkVersion은 앱이 지원할 최소의 SDK 버전을 의미합니다. Target은 가장 최신버전을 사용하는 것이 좋으며, 만일 특정 SDK 버전 이상에서만 작동되는 코드가 사용된 경우 이하의 SDK 버전에서는 오류가 발생하지 않도록 예외처리를 통해 분기 설정을 해주어야 합니다. minSdkVersion은 앱이 지원하고자 하는 최소한의 버전을 지정해주시면 되구요. 더보기
Proguard 적용하기 Proguard는 소스를 난독화하여 디컴파일에 의해 소스코드가 노출되는 것을 방지하기 위해 사용됩니다. Proguard를 적용하면 보안 향상 뿐 아니라 약간의 최적화가 이루어진다고 하니 앱 개발을 완료한 후 꼭 적용하는 것이 좋을 거 같습니다. 최신 ADT에서는 Progaurd를 기본 지원하여 Proguard 적용이 보다 간편해 졌습니다. 최신 ADT가 설치된 Eclipse에서 안드로이드 프로젝트를 생성하면 프로젝트의 루트 폴더에 proguard.cfg와 project.properties 파일이 생성되어있는 것을 확인할 수 있습니다. Progaurd 적용을 위해서는 project.properties 파일안에 아래의 코드 한줄만 추가하면 됩니다. proguard.config=proguard.cfg Prog.. 더보기
[펌] 성능을 위한 설계 아이군의 블로그에 안드로이드 앱 개발에 있어서 상당히 유용한 글이 있어서 퍼왔습니다. 마메렐핀님(이동훈님) - 2009.06.05 성능을 위한 설계 안드로이드 애플리케이션의 속도는 빨라야만 합니다. 음, 효율적이어야 한다고 말하는 쪽이 더 정확할 듯싶네요. 다시 말해, 제한된 컴퓨팅 파워와 데이터 저장소, 작은 화면, 갑갑한 배터리 수명 같은 모바일 장치 환경에서 가능한 한 효율적으로 실행되어야 한다는 것입니다. 애플리케이션을 개발할 때에는 이것을 명심하세요. 듀얼코어 개발 컴퓨터에서 실행하는 에뮬레이터에서는 충분히 잘 작동할지도 모르지만, 모바일 기기에서 실행할 때엔 그리 잘 되지 않을 것입니다. — 최고 성능의 모바일 기기라도 일반적인 데스크탑 시스템의 성능을 따라잡을 수는 없습니다. 그런 이유로, .. 더보기
this 사용에 따른 메모리 릭(Memory Leaks) 안드로이드 코딩을 하면서 빈번하게 사용되는 것이 Activity의 this 입니다. 이는 Context를 상속한 Activity의 Context 객체를 얻기 위한 변수인데요.. Context 변수를 필요로하는 메서드를 사용할 때 주로 액티비티명.this의 형태로 많이 사용합니다. 하지만 이렇게 Activity의 this를 직접 받아올 경우 메모리릭이 발생할 확률이 높다고 합니다. 따라서 Activity의 this를 통해 Context 객체를 가져오는 것보다 가급적 Context.getApplicationContext()나 Activity.getApplication() 메소드를 통해 Context 객체를 얻어내는 것이 좋다고 하는 군요. 보다 자세한 내용은 아래의 링크를 참조하세요. 휴휴휴 - [번역] 안.. 더보기
Interpolation(보간법) 수식 Interpolation 수식을 이용하여 프레임 애니메이션을 구현하면 서서히 가속하거나 감속하는 애니메이션을 만들 수 있습니다. Interpolation 수식에는 여러 방식이 있습니다. 부동소수점 연산을 이용한 프레임 의존적인 감속 보간 부동소수점 연산을 이용하는 경우 Euler 보간법과 달리 지수 함수를 사용하지 않기 때문에 CPU에 부담을 덜 줍니다. 따라서 감속 보간을 구현할 경우 Euler 보간법 보다 부동소수점 연산을 이용하는 것이 더 효율적입니다. 부동소수점 연산을 이용한 프레임 의존적인 감속 보간에 사용되는 수식은 아래와 같습니다. F(x) = (x_0 * (weight - 1) + x_final) / weight x_0 : 시작 좌표 x_final : 마지막 좌표 weight : 기울기의 .. 더보기