예전 중국 앱 프로젝트를 진행하다가 샤오미 폰에서 프로젝트내 RES영역에 있는 이미지가 나오지 않는 경우가 있었다.

문제의 원인이 뭔지 몰라서 한참 검색을 하다가 안드로이드에서 PNG 이미지 사용을 권장 하는 것을 알게 되었고 이미지 교체후 문제를 해결하였다.
문제의 원인은 JPG 이미지를 사용 이미지 손실이 발생하여 이미지가 보이지 않아 PNG이미지로 변경 후 사용했었다.

 

이미지 형식

설 명

확 장 자

PNG

무손실(권장)

.png

나인패치

무손실(권장)

.9.png

JPG

권장하지 않음(손실)

.jpg.jpeg

GIF

사용하지 않는 것이 좋음

.gif

 

안드로이드는 기본적으로 PNG이미지나 나인패치 이미지 사용을 권장한다고 한다.
JPG의 경우는 손실이 발생하여 권장하지 않고, GIF는 기본적으로 사용하지 않는것이 좋다고 하니... 꼭 필요한 경우에만 사용해야 한다.

안드로이드 앱 개발을 시작한지 2년즈음 됐을 때, 디버깅 로그를 추가 후 지우지 않고 그대로 배포하여 욕을 바가지로 먹고 피눈물을 쏟은 기억이 있다.
안드로이드 프로젝트 내 설정에서 막는 방법도 있지만, 간혹 로그가 그대로 노출 되는 경우도 있는 것 같다.
테스트 로그가 그대로 상용에 배포되는 실수를 반복하지 않고자 따로 Log 클래스를 만들어 상용배포시 boolean값만 변경하면 디버깅 내용이 나오지 않게 class를 만들었다.

/**  * Application Log  *   * @author dada  *   */ public class Looger {  	private final static String TAG = "Logger";  	private static Looger logger = null; 	private boolean debugAble = true;	//	true: 디버깅 가능, false : 디버깅 되지 않음  	private Looger(){} 	  	public static Looger getInstance(){ 		if (logger == null) { 			logger = new Looger(); 		} 		logger.debugAble = true; 		 		return logger; 		 	} 	public static Looger getInstance(boolean debuggerAble){ 		if (logger == null) { 			logger = new Looger(); 		}  		logger.debugAble = debuggerAble; 		 		return logger; 	}   	public void e(String message){ 		if (logger != null && debugAble == true){ 			Log.e(TAG, message); 		} 	}  	public void d(String message){ 		if (logger != null && debugAble == true){ 			Log.d(TAG, message); 		} 	}  	public void v(String message){ 		if (logger != null && debugAble == true){ 			Log.v(TAG, message); 		} 	}  	public void i(String message){ 		if (logger != null && debugAble == true){ 			Log.i(TAG, message); 		} 	}  	public void w(String message){ 		if (logger != null && debugAble == true){ 			Log.w(TAG, message); 		} 	} 	public void e(String TAG, String message){ 		if (logger != null && debugAble == true){ 			Log.e(TAG, message); 		} 	} 	 	public void d(String TAG, String message){ 		if (logger != null && debugAble == true){ 			Log.d(TAG, message); 		} 	} 	 	public void v(String TAG, String message){ 		if (logger != null && debugAble == true){ 			Log.v(TAG, message); 		} 	} 	 	public void i(String TAG, String message){ 		if (logger != null && debugAble == true){ 			Log.i(TAG, message); 		} 	} 	 	public void w(String TAG, String message){ 		if (logger != null && debugAble == true){ 			Log.w(TAG, message); 		} 	} } 

사용방법

 Looger.getInstance().e("===================결과값 확인===================");

따로 어려운 코드가 들어 간것은 아니지만 매번 새로 만들려면 귀찮으니 기록으로 남긴다.

모바일에서 세로모드(portrait)와 가로모드(landscape) 두가지 모드를 지원한다.
화면이 회전 될떄 데이터를 reload하거나 가로, 세로 해상도가 달라 문제가 되는 경우가 있다.
Native의 경우 가로 혹은 세로로 고정을 하여 앱을 개발하는데 아래소스를 추가하여 화면을 고정 할 수 있다.
1. manifest에 값을 추가하는 방법
Activity element 내에 추가

 android:screenOrientation="portrait" // portrait(세로) 화면 android:screenOrientation="landscape"> // landscape(가로) 화면 

2. Java소스 상(Activity class)에 추가 하는 방법
 setContentView 이전에 추가

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  // portrait(세로) 화면 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // landscape(가로) 화면 

가로, 세로를 모두 지원해야 할경우는 따로 가로 세로에 맞게 UI를 구현하고 Reload를 막을수 있으니 참고 하도록 하자

안드로이드는 다양한 해상도를 제공하여 개발 시 많은 어려움을 겪는다.
필요 시 소스 단에서 해상도에 따라 로직을 달리해 주어야 할 경우가 발생 하는 데 아래와 같이 화면의 높이와 넓이를 얻을수 있다.

DisplayMetrics displayMetrics = new DisplayMetrics();  getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);       int width = displayMetrics.widthPixels;  int height = displayMetrics.heightPixels;  

단 얻어지는 값은 픽셀 단위임 으로 필요에 따라 dp로 변경하여 사용하여야 한다.

'Android' 카테고리의 다른 글

[Android] Rest(Representational state transfer) API  (0) 2017.03.06
[Android] 권장 이미지 형식  (0) 2017.03.03
[Android] 디버깅 Class  (0) 2017.02.27
[Android] 화면 고정  (0) 2017.02.27
[Android] 앱 내 타이틀 바 없애기  (0) 2017.02.27

안드로이드 앱 개발 시 기본으로 Title바가 생기게 되는데, 간단히 제거할수 있다.

1. Activity class파일 에서 제거
setContentView 이전에 아래코드를 추가

requestWindowFeature(Window.FEATURE_NO_TITLE);

.
2.manifest 파일에 추가
activity element 속성 내에 아래 코드를 추가

android:theme="@android:style/Theme.NoTitleBar"

'Android' 카테고리의 다른 글

[Android] Rest(Representational state transfer) API  (0) 2017.03.06
[Android] 권장 이미지 형식  (0) 2017.03.03
[Android] 디버깅 Class  (0) 2017.02.27
[Android] 화면 고정  (0) 2017.02.27
[Android] 폰 해상도 얻는 방법  (0) 2017.02.27

+ Recent posts