2012년 7월 8일 일요일

[안드로이드] 스마트폰 레이아웃


요샌 안드로이드 폰 종류도 너무 많고 레이아웃, 해상도도 천차 만별...
외우려면 힘드니 이곳에 정리 하려 한다.

갤럭시넥서스: layout-sw360dp
갤럭시노트: layout-xhdpi-1280x800 (or layout-normal-xhdpi)
갤럭시탭10.1: layout-xlarge-mdpi(3.2이상 버전에서는 layout-sw800dp로도 가능)
HD(1280x720)폰: layout-xhdpi-1280x720 (layout-normal-xhdpi)
HTC Evo4g: layout-hdpi-960x540

OS버전 3.2이상에서는 layout-sw800dp와 같이 너비(짧은축의 길이)의 dip값으로 하면 편리할 듯 합니다.

해상도별 스크린 레이아웃안드로이드 2012/02/21 12:37
QVGA(240x320), 120dpi : HTC Tatoo
HVGA(320x480), 160dpi : 안드로원, HTC G1
WVGA(480x800), 240dpi : 넥서스원, 갤럭시A
FWVGA(480x854), 240dpi : 모토로이


1. Low desity 120 - ldpi
    QVGA(240x320)  : 2.6~3.0
    WQVGA(240x400) : 3.2~3.5
    FWQVGA(240X432) : 3.5~3.8


2. Medium density 160 - mdpi
   HVGA(320X480) : 3.0~3.5
   WVGA(480x800) : 4.8~5.5
   FWVGA(480X854) : 5.0~5.8


3. High density 240 - hdpi
   WVGA(480x800) : 3.3~4.0
   FWVGA(480X854) : 3.5~4.0


4. x High density 320 - xhdpi
    (720*1280)


갤럭시탭 10.1
drawable-xlarge-mdpi
layout-xlarge 또는 layout-1280x800


갤럭시탭 7.0
drawable-large-hdpi
layout-1024x600


일반폰 (480x800)
drawable-hdpi
layout


HD폰(1280x720)
drawable-xhdpi
layout-1280x720



갤럭시넥서스: layout-sw360dp
갤럭시노트: layout-xhdpi-1280x800 (or layout-normal-xhdpi)
갤럭시탭10.1: layout-xlarge-mdpi(3.2이상 버전에서는 layout-sw800dp로도 가능)
HD(1280x720)폰: layout-xhdpi-1280x720 (layout-normal-xhdpi)
HTC Evo4g: layout-hdpi-960x540

res/layout/ 폴더를 더더욱 구분하여 스마트폰의 해상도별 xml을 나눌뿐만 아니라
태블릿도 구분할수 있게되었어요(원래 그랬던건지..그냥 새로 만들어준건지는 나도몰라아아아)


res/layout/main_activity.xml          -> 스마트폰
res/layout-sw600dp/main_activity   -> 7인치 태블릿
res/layout-sw720dp/main_activity   -> 10인치 태블릿


public class MyActivity extends Activity 
{
@Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate();


Configuration config = getResources().getConfiguration();


if (config.smallestScreenWidthDp >= 600) 
{
setContentView(R.layout.main_activity_tablet);
} else {
setContentView(R.layout.main_activity);
}
}
}


—리소스포더이름으로구분처리
서로다른스크린의리소스관리
 - res/layout/my_layout.xml
Normal스크린사이즈레이아웃
 - res/layout-small/my_layout.xml
Small 스크린사이즈레이아웃
 - res/layout-large/my_layout.xml
Large 스크린사이즈레이아웃
 - res/drawable-ldpi/my_icon.png
Low density를위한아이콘
 - res/drawable-mdpi/dpi/my_icon.png
MediumDensity를위한아이콘
 - res/drawable-hdpi/my_icon.png
High Density를위한아이콘
 - res/drawable-nodpi/composite.xml
Density 와무관한리소스

* 밀도(Density)
 스크린해상도를기반으로물리적인넓이와높이안에얼마나많은픽셀이들어있는가를나타낸다. Lower density의스크린에서는같은넓이와높이안에더적은수의픽셀이있고, higher density의스크린에서는같은넓이와높이안에더많은수의픽셀이있다. 안드로이드는밀도를high, medium, low 세가지분류로나눈다. 플랫폼에서는실제스크린밀도에맞게리소스들의사이즈를조정한다.
Density-independent pixel (dip)
밀도와상관없이레이아웃의위치를표현할때사용하는가상의pixel 단위. Density-independent pixel 은기본밀도인160dip에서의물리적인 pixel과같다.
픽셀변환공식 pixels = dips * (density / 160)

아...저 토나오는 광경...같은게 하나도 없는 물건들...


갤럭시 노트
해상도  :  1280 * 800
Density  :  xhdpi
크기  :  5.3인치(large screen)
OS  :  Android 2.3 갤럭시 S2
해상도  :  800 * 480
Density  :  hdpi
크기  :  4.3인치(normal screen)
OS  :  Android 2.3  갤럭시 탭 10.1
해상도  :  1280 * 800
Density  :  mdpi
크기  :  10.1인치(xlarge screen)
OS  :  Android 3.0

참조 : http://sptraulyo.tistory.com/447

2012년 7월 6일 금요일

2012년 7월 4일 수요일

[Android] adb shell dumpsys


커맨드 창에 다음과 같이 입력하면 디바이스에 대한 자세한 정보를 확인 할 수 있다.
adb shell dumpsys
추가로 dumpsys 뒤에 옵션을 지정해 표시할 정보를 제한 할 수 있다. 
또한 dumpstate 도 있으니 디버깅에 유용하게 사용 하자.



dumpsys
  dumpsys는 안드로이드 폰의 어플리케이션 및 현재 기기의 상태에 대한 자세한 정보를 제공한다.
  (소스코드 위치: ./frameworks/base/cmds/dumpsys/dumpsys.cpp)

  dumpsys meminfo: 메모리 사용 정보를 표시
  dumpsys cpuinfo: CPU 프로세서 사용 정보를 표시
  dumpsys account: 모든 계정에 대한 정보를 표시
  dumpsys activity: Activity에 대한 정보를 표시
  dumpsys window: 키보드와 윈도우, 그리고 그들의 z order에 대한 정보를 표시
  dumpsys wifi: 접속 가능한 액세스 포인트와 현재의 연결 상태를 표시
  dumpsys power: 전원 관리와 관련된 정보(wakelock, screen off time 등)를 표시

dumpstate
  dumpstate는 device 상태정보를 추출하는 여러 명령어들의 조합으로 구성 (dumpsys를 포함)
  (소스코드 위치: ./frameworks/base/cmds/dumpstate/dumpstate.c)

  Usage: dumpstate  [-d]  [-o  file]  [-s]  [-z]
            -d: 파일 이름에 날짜 정보를 추가 (-o 옵션과 함께 사용)
            -o: 파일에 기록 (screen에는 표시하지 않음)
            -s: 결과를 콘솔 소켓에 기록
            -z: gzip 압축하여 파일로 기록 (-o 옵션과 함께 사용)

[안드로이드] SD 존재 확인

출처 : http://www.androes.com/141


일반적으로 외장카드 영역을 불러올때 /mnt/sdcard 이런 식으로 하드 코딩하시는 분들이 많은데
이런 경우 외장카드를 사용하지 않는 사용자인 경우 에러가 발생하게 됩니다.

사용자 폰에 외장카드 존재유무를 확인하여 처리하는 모듈을 간단히 구현해 봤으니 참고하세요!!

        String mSdPath;
        String ext = Environment.getExternalStorageState();
        if (ext.equals(Environment.MEDIA_MOUNTED)) {
            mSdPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/";
        } else {
            mSdPath = Environment.MEDIA_UNMOUNTED+"/";
        }
        File file = new File(mSdPath);
        if (!file.exists()) mSdPath = "";       

        // 파일 생성
        BufferedWriter out = new BufferedWriter(new FileWriter(mSdPath+"androes.txt"));
        out.write("test text messages");
        out.newLine();
        out.close();

        // 파일 삭제
        File file = new File(mSDPath + "/" + "androes.txt");
        file.delete();


2012년 6월 25일 월요일

[MAC] 맥 폰트가 흐릿한 경우 해결법

맥 폰트 흐릿한 문제

http://clien.career.co.kr/cs2/bbs/board.php?bo_table=cm_mac&wr_id=458305

[MAC] 맥 한글 폰트 바꾸기

맥 한글 폰트는 정말 눈아프다 -ㅁ-;;
이렇게 바꿔 보자

http://blackturtle.tistory.com/711488