키이벤트 다른것 찾다가 나중에 유용하게 쓰일것 같아서 가져왔습니다. ㅋ

=========================================================================================================


하드웨어 키를 누른 효과를 프로그래밍 내에서 인위적으로 발생시킨다. 


import android.app.Activity;

import android.app.Instrumentation;

import android.os.Bundle;

import android.os.Handler;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;


public class Test extends Activity {

 

 /** Called when the activity is first created. */

 @Override

 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);


  setContentView(R.layout.main);

  Button btn = (Button) findViewById(R.id.btn);

  btn.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {

    new Thread(new Runnable() {         

        public void run() {                 

            new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_UP);

        }   

    }).start();

   }

  });

 }

}


[출처] Android KeyEvent 강제 발생 ( Instrumentation keyCode )|작성자 아즈라엘


안드로이드 드바이스 정보 보기

 

public class ModelNameTest extends Activity{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
 Log.d("ModelNameTest", "BOARD: " + Build.BOARD);
        Log.e("Device Info", "BRAND: " + Build.BRAND);
        Log.e("Device Info", "CPU_ABI: " + Build.CPU_ABI);
        Log.e("Device Info", "DEVICE: " + Build.DEVICE);
        Log.e("Device Info", "DISPLAY: " + Build.DISPLAY);
        Log.e("Device Info", "FINGERPRINT: " + Build.FINGERPRINT);
        Log.e("Device Info", "HOST: " + Build.HOST);
        Log.e("Device Info", "ID: " + Build.ID);
        Log.e("Device Info", "MANUFACTURER: " + Build.MANUFACTURER);
        Log.e("Device Info", "MODEL: " + Build.MODEL);
        Log.e("Device Info", "PRODUCT: " + Build.PRODUCT);
        Log.e("Device Info", "TAGS: " + Build.TAGS);
        Log.e("Device Info", "TIME: " + Build.TIME);
        Log.e("Device Info", "TYPE: " + Build.TYPE);
        Log.e("Device Info", "USER: " + Build.USER);
    }
}

 

안드로이드 설정된 언어 판단하기 !!!

 

getResources().getConfiguration().locale.getDisplayLanguage();

이방법은 실제로 유저가 언어를 선택할때 보여지는 언어명입니다.

예를 들어 한국어, English,中文 이렇게 말입니다.

 

 

getResources().getConfiguration().locale.getDefault().getLanguage();

이방법은 실제로 유저가 보는 부분은 아닙니다.

예를 들어

한국어 = ko

English = en

과 같이 개발자가 쓰기에 적당합니다.

 

사용해본결과 레이아웃 판단은 getResources().getConfiguration().locale.getDefault().getLanguage();

 

이것을 사용하는것 같더라구요.

 

참고하세요~

[Java] 문자열 관련 Tip!! ETC 2012. 8. 30. 12:54
  1. 문자열의 선언
    string str = "마음소프트";
    System.String str = "마음소프트";
    String str = "마음소프트";
    // 보통 첫번째인 string형으로 많이 선언하게 됩니다.
  2. 인덱스(Index)로 접근하기
    string str = "가나다라마바사";
    Response.Write( str[0] );
    // 결과는 첫번째 문자인 '가' 출력
  3. 문자열 추가
    string str1 = "반갑습니다. ";
    str1 = str1.Insert(str1.Length, "홍길동님");
    str1 = str1.Insert(0, "앗! ");
    Response.Write( str1 );
    // 결과는 '앗! 반갑습니다. 홍길동님' 출력

    string str2 = String.Concat("마", "음", "소", "프", "트");
    Response.Write( str2 );
    // 결과는 '마음소프트' 출력

    string str3 = "마" + "음" + "소" + "프" + "트";
    Response.Write( str3 );
    // 결과는 '마음소프트' 출력

  4. 대소문자 변환
    C#은 대소문자를 구분하기 때문에 자주 사용되며, 대소문자가 구분없는 한글은 별다른 소용이 없습니다.
    예를 들면, 'MaumSoft' 값과 'maumsoft' 라는 값은 서로 틀린 값이라고 보시면 되겠습니다. 사실은 같은 값이지만 --;

    string str = "MaumSoft";
    Response.Write( str.ToUpper() );
    Response.Write( str.ToLower() );
    // 결과는 각각 'MAUMSOFT', 'maumsoft' 출력

  5. 공백 문자열 지우기
    string str = " 마음소프트 ";
    str = str.TrimStart(); // 앞(왼쪽)쪽 문자열 삭제
    str = str.TrimEnd(); // 뒤(오른쪽)쪽 문자열 삭제
    str = str.Trim(); // 양쪽 문자열 삭제
    // 특별한 상황이 아니면, 보통 Trim을 씁니다.
  6. 문자열을 찾아서 문자열 자르기
    전체 문자열에서 어떤 문자열을 찾아서, 그 검색된 문자열을 다음 공백까지 잘라내는 작업을 많이 합니다.
    전문 용어로 이를 파싱(Parsing)이라고 부릅니다.
    IndexOf( "검색할 문자열" );
    LastIndexOf( "검색할 문자열" );
    Substring( 자를 위치 첨자 );
    Substring( 자를 위치 첨자, 첨자에서 자를 만큼의 길이 );
  7. 구분자 기준으로 문자열 자르기 (Split)
    구분자를 기준으로 문자열을 분리시켜서 배열로 반환합니다.
    string str = "가,나,다,라,마";
    string [] result = str.Split(',');
  8. 문자열 치환하기
    문자열 중 특정 문자를 다른 문자로 바꾸고 싶을때 Replace 가 사용됩니다. 특히 ASP.NET 에서 내용을 보여줄때 꼭 쓰입니다.
    string str = "마음소프트\r\nC# 라이브러리";
    str = str.Replace( "\r\n", "<br>" );
    // 글 입력을 받을 때 textarea 내에서 엔터를 치면 /r/n 으로 데이터가 입력됩니다. (일명 Carriage return 과 New line)
    // 그냥 출력해서 보여주면 내용이 라인 구분없이 계속 붙어 나옵니다.
    1. System.String 클래스의 인스턴스 메서드
    1. Clone
    클래스 참조 반환
    CompareTo 특정 객체와 비교
    CopyTo 객체 복사
    EndsWith 특정 문자열로 끝나는지를 확인
    Equals 비교 연산
    GetEnumerator IEnumerator 인터페이스 반환
    GetHashCode 해쉬 코드 반환
    GetType 형식 정보 반환
    GetTypeCode TypeCode 반환
    IndexOf 문자열 검색
    IndexOfAny 유니코드 문자열에서 먼저 나오는 문자 반환
    Insert 문자열 삽입
    LastIndexOf IndexOf를 뒤에서부터 수행
    LastIndexOfAny IndexOfAny를 뒤에서부터 수행
    PadLeft 문자열에서 남아있는 왼쪽을 빈 공백으로 채움
    PadRight 문자열에서 남아있는 오른쪽을 빈 공백으로 채움
    Remove 지정 개수의 문자 제거
    Replace 문자열 치환
    Split 문자열 분리하여 배열로 반환
    StartsWith 특정 문자로 시작하는지를 확인
    Substring 문자열 추출
    ToCharArray 문자 배열로 변환
    ToLower 소문자로 변환
    ToString 객체를 나타내는 문자열 반환
    ToUpper 대문자로 변환
    Trim 양쪽 공백 없앰
    TrimEnd 문자열 끝 부분의 공백 없앰
    TrimStart 문자열 시작 부분의 공백 없앰


    1. ### code -----------------------------------------------------------------------------
    2. using System;

      namespace ConsoleTest
      {
      class Class1
      {
      public static void Main(string[]args)
      {

      //문자열 비교
      string str;
      string str1="ABC";
      string str2="ABC";
    3. if(str1.Equals(str2))
      Console.WriteLine("동일");
      else
      Console.WriteLine("다름");
    4. //문자열삭제
      string str3 = "나는 문자열입니다.";
      Console.WriteLine(str3.Remove(3,4)); //3위체에서부터 4개 삭제
    5. //양식문자열
      //콘솔이 아닌 웹등에서 사용용이, 사용법은 WriteLine과 같음.

      str = String.Format("{0,10}","ABC");
      Console.WriteLine(str); //콘솔에서는 WriteLine 사용
      Console.WriteLine(String.Format("{0:f2}",1520));
    6. //문자열 일정문자단위로 분리
      string csv = "전도환, 노테우, 김명삼, 김대증,노모현,이헤찬, 니미럴....";
      string [] result;
    7. result = csv.Split(',');
      for( int i=0; i<result.Length;i++)
      Console.WriteLine(result[i].Trim());
    8. //문자열길이, 복제. 비교
      str = "가나다라마바사";
      Console.WriteLine("문자열 : {0}", str);
      Console.WriteLine("문자열 길이 : {0}", str.Length);
      Console.WriteLine("문자열 복제 : {0}", str.Clone());
      Console.WriteLine("문자열 비교 : {0}", str.Equals("ABCDE"));
    9. //Indexer
      char firstChar = str[0];
      Console.WriteLine("첫문자 : {0}", firstChar); // 결과 : 가
    10. //문자열 추가 ( Insert )
      str2="추가문자열";
      str = str.Insert(0, str2); //0번째 위치에 str2문자열 추가
      Console.WriteLine(str);
    11. //문자열 병합 ( Concat )
      str2 = String.Concat("가","마","사");
      Console.WriteLine(str2);
      str2 = String.Concat(str,"마","사");
      Console.WriteLine(str2);
      str2 = str2 + str;
      Console.WriteLine(str2);
    12. //대소문자 변환 ( ToLower, ToUpper )
      str = "Hi~ GoodMorning~";
      Console.WriteLine(str.ToUpper());
      Console.WriteLine(str.ToLower());
      Console.WriteLine(str);
    13. //문자열 좌/우 공백제거 ( Trim )
      str = " 열심히 공부하세요 ";
      Console.WriteLine(">" + str.TrimStart() + "<") ;
      Console.WriteLine(">" + str.TrimEnd() + "<");
      Console.WriteLine(">" + str.Trim() + "<");
      Console.WriteLine(">" + str.TrimStart().TrimEnd() + "<");
    14. //문자열 치환 (Replace) 대소문자 구분한다.
      str = "Hello~";
      Console.WriteLine(str);
      Console.WriteLine(str.Replace("~", "..."));
    15. //문자열 검색, 0부터 시작. 해당하는 문자열의 첫번째 위치값 리턴 ( IndexOf )
      Console.WriteLine(str.IndexOf("공부"));
    16. str = "I Love You~";

      //문자열 추출b ( Substring )
      Console.WriteLine(str.Substring(2)); //2번째위치부터 끝까지
      Console.WriteLine(str.Substring(2,4));
      }
      }
      }
    17. ### -------------------------------------------------------------------------------------



    18. ToCharArray
      - 문자열을 Char형의 배열 형식으로 반환합니다
    19. ### code -----------------------------------------------------------------------------
    20. using System;

      namespace ConsoleTest
      {
      class Class1
      {
      public static void Main(string[]args)
      {

      string str = "012wxyz789";
      char [] arr;
    21. arr = str.ToCharArray(3, 6); //3번째 위치에서 6개의 글자를 추출해 배열방에 각각 넣는다.
      Console.Write("The letters in '{0}' are: '", str);
      Console.Write(arr); //배열방 출력시 해당내용 출력
    22. for( int i=0;i<arr.Length;i++) //각각의 배열방에도 들어가 있음.
      Console.WriteLine(arr[i]);
    23. Console.WriteLine("'");
    24. char [] array;
      array = str.ToCharArray(); //인자를 써주지 않으면 모든 문자 배열에 집어넣음
      Console.WriteLine("Each letter in '{0}' is:", str);
      Console.WriteLine(array);
    25. foreach (char c in arr)
      Console.WriteLine(c);
      }
      }
      }
    26. ### -------------------------------------------------------------------------------------

      System.Text.StringBulider
      - 닷넷에서 String클래스를 이용한 문자열 처리는 비효율적
      - 대형 문자열이나 잦은 문자열 변경시
      - 대부분의 문자열 관련 함수들이 String 인스턴스를 새로 생성시켜 반환
    27. StringBulider sb = new StringBulider("ABC");
    28. - StringBuilder.Capacity : 객체내에 문자열 버퍼 크기
      - StringBuilder.Length : 문자열 길이
    29. ### code -----------------------------------------------------------------------------
    30. using System;

      namespace ConsoleTest
      {
      class Class1
      {
      public static void Main(string[]args)
      {

      StringBuilder sb = new < /FONT > StringBuilder("I am a Boy", 18);
      // StringBuilder Test
      //가용량을 적어주지 않으면 기본 용량은 16이고, 기본 최대 용량은 Int32.MaxValue
    31. Console.WriteLine(sb.ToString());
      Console.WriteLine(sb.Length);
      Console.WriteLine(sb.Capacity);
      Console.WriteLine(sb.MaxCapacity);
    32. Console.WriteLine(sb.Insert(0,"삽입"));
    33. Console.WriteLine(sb.Remove(0,2));
    34. Console.WriteLine(sb.Append("추가문자열"));
      Console.WriteLine(sb.Append(5000));
      Console.WriteLine(sb.AppendFormat("{0,10}","end"));
    35. Console.WriteLine(sb[0]);
      sb[0] = 'i';
      Console.WriteLine(sb[0]);
    36. Console.WriteLine(sb.ToString().Replace(" ",""));
      Console.WriteLine(sb.ToString().IndexOf("Boy"));
      }
      }

      }
  •  

    'ETC' 카테고리의 다른 글

    [JAVA]compareTo 를 이용한 String비교  (0) 2013.01.15
    [ETC] SSD USB 설치시 오류  (0) 2012.11.13
    이클립스 디버깅 Tip  (0) 2012.08.03
    이클립스 테마 플러그인하는 방법!(컬러&폰트)  (0) 2012.06.15
    이클립스 폰트 설정.  (0) 2012.06.15

    StringTokenizer
    String a = 123456-654321;
    StringTokenzier st = new StringTokenzier(a,"-");
    String a1 = st.nextToken();
    String a2 = st.nextToken();

    a1 -> 123456

    a2 -> 654321

    단 중간에 null 이면 오류납니다.


    split

    a=123456-1234567

    String[] arr = a.split("-");

     

    등이 있네요

     

    구문중 줄바꾸기

    /n

    예=====>>> <string name="FUSClient_file_request">[알림] \n 요청알림</string>

    결과===>>>    [알림]

       요청알림

     

    구문중 띄어쓰기

    &#160;

    예=====>>> <string name="FUSClient_file_request">[알림] &#160; 요청알림</string>

    결과===>>> [알림] 요청알림

     

    다른것도 추가로 놀릴게요 ㅋ

    [Android]다국어 지원시 TIP


    다국어 지원시 레이아웃 , Java 코드 상의 하드코딩으로 입력되는 


    모든 텍스트를  res - > valuse - > strings.xml  에 입력한다.


    java코드 상에서 불러오기!


    getText(R.string.이름) 혹은  getText(R.string.이름).toString() 으로 불러온다


    단 이를 사용하기 위해선 Context가 있어야 하며 없을시에는 땡겨 와서 사용해야한다.


    레이아웃 상에서 불러오기!


    android:text="@string/이름" 의 형태로 불러온다.


    UI 상에서 변경!


    마지막으로 랭귀지 변화에 따른 UI변동이 있을시 


    drawable-en-hdpi        <- 이미지 폴더

    layout-en                    <- 레이아웃 폴더

    values-en                   <- 벨류폴더             


    추가! 한다. 추가입니다. 기존거 있고 추가로 만들어 넣습니다.


    이미지 폴더는 이미지의 텍스트가 박혀있는 경우 변경하고

    레이아웃 폴더는 한글이변경되면서 길이가 변경 되는경우 레이아웃에 수정이 되므로 필요함

    벨류폴더 이곳에 실제 변환되어진 strings.xml 파일이 있으므로 꼭 필요


    변환은 디바이스 랭귀지를 따라 갑니다. 


    이상입니다.



    이클립스 디버깅 Tip ETC 2012. 8. 3. 10:10

    예전 테스트 에디터를 사용해 개발할 때는 문제가 있을 것으로 의심되는 부분에 코드의 어는 부분이 실행되는지, 해당 부분에서 변수나 수식의 값이 어떻게 변하는지를 보기 위해 System.out.println() 을 넣고, 콘솔로 출력되는 메시지를 보며 작업했었다. 하지만, 이런 방법은 불편함과 문제를 안고 있다.

    이에 Eclipse는 디버깅 작업을 효율적으로 할 수 있도록 도와주는 여러 가지 도구를 제공한다.


    1. 디버그 모드로 실행하기

    프로그램을 디버깅하려면 디버그 모두로 실행해야 한다. 디버그 모드로 프로그램을 실행할 때는 메뉴바의 Run > Debug As를 이용하면 된다. 메뉴바에서 Run > Debug를 선택하면 Debug 다이얼로그가 뜨며, Java Application에서 실행하려는 설정을 선택하고, Debug버튼을 누르면 프로그램이 디버그 모드로 실행된다.


    만약, 이클립스 디버그에 관해 별도의 세팅을 하지 않은 경우에 아래와 같이 다이얼로그가 뜨며, 여기서 Java Application으로 프로젝트를 생성한다. 생성 방법은 Java Application노드에서 오른쪽 버튼 클릭 > New를 클릭하자.

    그러면, 아래와 같은 다이얼로그가 나타난다.

    위의 그림과 같이 Entry Point를 설정해 준다. 즉, main메소드가 있는 클래스의 이름을 셋팅해주고 기타 등등의 설정을 한후 Debug버튼을 클릭하면 디버그가 실행이 된다.

    아래 그림은 Debug 다이얼로그에서 Main탭의 Stop in main 체크박스에 체크한 상태에서 프로그램을 디버그 모드로 실행한 모습이다. Stop in main 체크박스에 체크했기 때문에, main()매서드의 첫 코드가 실행되기 직전에 진행이 멈추었다. 이렇게 멈춘 프로그램을 계속하려면, Debug 뷰의 툴바에서 Resume 버튼을 누른다.

    2. 브레이크포인트 (Breakpoint) 설정하기

    작성한 프로그램이 의도대로 실행되지 않는다면, 의심되는 부분을 집중적으로 살펴봐야 하는데, 바로 이럴 때 사용하는 것이 브레이크포인트이다.

    Eclipse는 프로그램을 실행하다가 브레이크포인트를 만나면 프로그램의 실행을 멈추고 에디터에 브레이크포인트가 지정된 행을 하이라이트한다. 이상태에서 프로그램을 한 단계씩 실행시키며 프로그램의 흐름이 원하는 대로 진행되는지, 각 변수나 수식의 값이 제대로 설정되고 있는지를 확인 할 수 있다. 브레이크포인트는 디버그 모드로 실행될 때만 의미가 있다.

    브레이크포인트를 사용해보자. 에디터에서 브레이크포인트를 지정하고 싶은 위치에 에디터의 왼쪽에 있는 마커(marker bar)를 더블클릭하거나 마커바에서 오른쪽 버튼 클릭 > Toggle Breakpoint를 선택해도 된다. 브레이크포인트가 추가되면 마커바에 파란색 동그라미로 표시된다. 삭제는 파란색 동그라미를 더블클릭하면 제거된다.

    브레이크포인트를 설정하고 디버그를 실행하면 아래와 같은 그림이 나온다.

    설정된 브레이크포인트들은 [Breakpoints View]에 전부 리스트 되며 설정된 브레이크포인트는 Breakpoints View에서 해당 항목을 check, uncheck 함에 따라 활성화 또는 비활성화된다

    * 브레이크포인트 활성화/비활성화

    상황에 따라 브레이크포인트를 활성화하거나 비활성화할 수 있다. 활성화 상태에서 브레이크포인트의 팝업 메뉴중 Disable Breakpoint를 선택하면 비활성화 된다. 비활성화 브레이크포인트는 흰색 동그라미로 표시되고, 이 상태에서는 프로그램의 실행을 멈추지 않는다. 이는 특정 브레이크포인에서 실행을 멈추지 않고 싶지 않지만, 그렇다고 삭제하고 싶지 않은 경우에 이용한다.

    비활성화를 활성화 하려면 팝업 메뉴에서 Enable Breakpoint를 선택하면 된다.

    루프 안에 설정된 브레이크포인트의 반복 횟수가 많을 경우(오류로 인한 무한 로프) 특정 회수에 대해서만 프로그램이 멈추게 하기 위해서는 브레이크포인트가 설정된 마커바에서 오른쪽 버튼의 팝업 메뉴의 [Breakpoint properties]를 눌러 나타나는 팝업 창의 [Hit Count]를 체크하고 방문 횟수를 입력한다.

    또는 Hit Count를 설정하려는 브레이크포인틀 선택한 다음 컨텍스트 메뉴에서 Hit Count를 선택하려는 브레이크포인트를 선택한 다음 컨텍스트 메뉴에서 Hit Count를 선택하면 아래와 같은 그림이 뜨며, 여기에 적절한 숫자를 입력하면 된다.

    브레이크포인트에 Hit Count가 설정되면, Breakpoint 뷰에서 해당 브레이크포인트 옆에 아래 그림과 같이 Hit Count 숫자가 표시된다.

    3. 디버그 진행하기

    설정한 환경 (breakpoint, hit count, stop in main...) 에 따라 프로그램의 진행을 수동으로 관리할 수 있다. 여기에서는 [Debug View]의 툴 바에 있는 메뉴들을 중심으로 Debug 진행 관리 방법을 살펴보자.

    (1) Resume (F8): 멈췄던 쓰레드 다시 진행. 다음 브레이크포인트까지 계속 진행

    (2) Suspend: 쓰레드를 멈춤

    (3) Terminate: 프로그램 종료

    (4) Step Into (F5): 스텝 단위로 프로그램 실행, 메서드가 호출될 경우 그 메서드 안으로 이동

    (5) Step Over (F6): 메서드가 호출되더라도 메서드 안으로 이동하지 않고 현재 코드 진행

    (6) Step Return (F7): 현재 메서드로부터 리턴. 메서드 호출부로 위치 이동

    (7) Drop to Frame: 특정 메서드를 실행하다 그 메서드의 처음부터 다시 실행

    (8) Step Filtering: 디버깅 도중 디버깅 대상이 되지 않는 메서드 안으로는 들어가지 않게 설정하는 곳. [Window > Preferences > Java > Debug > Step Filtering]에서 설정

    아래 그림과 같이 Debugging을 하며 관련된 변수들을 관찰할 수 있는 창이 있는데 이 창이 [Variables View]이다. 현재 가용한 변수들이 나열되고 현재 진행 시점에 할당되어 있는 값을 볼 수 있다.

    [Display View] 현재 스택 프레임의 컨텍스트에서 실행할 수 있는 모든 종류의 수식을 입력 및 실행이 가능하다. 원본 코드의 수정 없이 다양한 형태로 메서드나 변수 값들을 또는 그 조합 결과를 확인해 볼 수 있다. [Window > Show View > Display] 로 Display View를 활성화 시킨다. 관찰하고자 하는 수식이나 메서드들을 기술해 놓는다. Debugging을 하면서 현재 Display View에 기술된 수식 또는 메서드의 상태 값을 알기 위해서는 해당 항목을 선택한 수 뷰 툴바의 [Display Result of Evaluating Selected Test] 또는 [Ctrl + Shift + D]를 누르면 값을 보여준다. 잘못된 입력이나 값을 알 수 없는 상황일 경우 에러를 보여준다.

    [Inspect]는 Display View에서는 결과를 문자열로만 파악할 수 있다. 때문에 객체의 상태를 알기 위해서는 다른 방법을 사용해야 하며 그 중 하나가 Inspect 기능을 이용하는 것이다. Inspect 는 관찰 대상 수식을 선택하고 컨텍스트 메뉴에서 Inspect를 선택 (Ctrl + Shift + I)하는 것이다. 하지만 Inspect는 일시적인 관찰 방법이며 자세한 관찰을 하고 싶을 경우 [Ctrl + Shift + I]를 다시 눌러 Expression View 로 대상을 옮겨 관찰한다.

    [Watch] 특정 수식을 지속적으로 관찰하고 싶을 경우 inspect 기능이나 Display View를 이용하는 것은 번거로울 수 있다. 이런 때 Watch 기능이 아주 유용할 수 있다. Watch 기능은 Expressions View안에서 작동한다. 위 그림에서 작은 '(X+Y)' 아이콘이 붙은 항목들이 Watch 기능이 적용되고 있는 것들이다. Watch 항목은 Expressions View 내에서 [컨텍스트 메뉴 > Add Watch Expression]을 눌러 나타나는 [Add Watch Expression] 위한 팝업 창에 여러 가지 수식을 입력하여 지속 관찰할 수 있다.

    [Android] DPI 구하기! Android 2012. 7. 19. 15:05

    안드로이드의 걸림돌....UI 작업입니다. ㅠㅠ

    각 기종마다 다른 DPI 에 따라 작업을 해야하는 경우가 생깁니다. 참고하세요

     

    dpi( dots per inch) = > 1인치에 들어 있는 픽셀의 수. 안드로이드에서는 160을 기본으로 한다.

    코드상에서 구하는법 => context.getResources().getDisplayMetrics().densityDpi


    디바이스 독립 픽셀

    dp = pixel / (dpi=density / 160)


    안드로이드기반 디바이스들의 dp가 같으면 dp 단위로 레이아웃을 작성하면 된다.

    하지만 다른 폼팩터일 경우에는 레이아웃을 새로 만드는편이 낫다?


    아래는 현재 나와있는 스마트폰을 정리해 봄


    [HVGA 스마트폰]

    - RESOLUTION : 320px(320dp) * 480px(480dp)

    - DENSITY DPI : 160 dpi

    - SCREEN SIZE : normal


    예 : G1, 옵티머스원


    [WVGA 스마트폰]

    - RESOLUTION : 480px(320dp) * 800px(533dp) or 854px(569dp)

    - DENSITY DPI : 240 dpi

    - SCREEN SIZE : normal


    예 : 넥서스원, 갤럭시S, 갤럭시S2 , XPERIA X10


    [7인치 태블릿]

    - RESOLUTION : 600px(600dp) * 1024px(1024dp)

    - DENSITY DPI : 160 dpi

    - SCREEN SIZE : large


    예 : 킨들 파이어


    [10인치 태블릿]

    - RESOLUTION : 800px(800dp) or 720px(720dp) * 1280px(1280dp)

    - DENSITY DPI : 160 dpi

    - SCREEN SIZE : xlarge


    예 : 갤럭시탭 10.1, 모토로라 XOOM


    [갤럭시노트]

    - RESOLUTION : 800px(400dp) * 1280px(640dp)

    - DENSITY DPI : xhdpi, 320 dpi


    [7인치 갤럭시탭]

    - RESOLUTION : 600px(400dp) * 1024px(682dp)

    - DENSITY DPI : hdpi, 240 dpi

    - SCREEN SIZE : large(Gingerbread)


    안드로이드를 기반으로한 폼팩터가 스크린을 기준으로 4개로 나뉜다는 것을 볼수있다.

    1. 320dp 스마트폰

    2. 400dp 태블릿폰

    3. 600dp 7인치 태블릿

    4. 720dp(800dp) 10인치 태블릿.


    따라서 다중디스플레이를 지원하려면 총 4개의 폼팩터 별로 레이아웃을 작성하는것이 좋을것 같다.


    추가(2012.03.05)

    안드로이드 3.2 이상에서는 dp로 레이아웃 지정이 가능하다.


    1. dp 너비(width dp): 현재 어플리케이션 레이아웃을 위해 사용할 수 있는 "dp" 너비 입니다. 화면의 가로 세로 모드에 따라 변경됩니다 (사용법: layout-w400dp)

    2. dp 높이(height dp): 현재 어플리케이션 레이아웃이 사용할 수 있는 "dp" 높이 입니다. 화면의 가로 세로 모드에 따라 변경됩니다. (사용법: layout-h800dp)

    3. 최소 dp 너비(smallest width dp): 어플리케이션 레이아웃이 사용가능한 최소 너비 입니다. 화면 회전과 상관없이 단말의 가로 세로 중에 작은 "dp"에 따라 변경됨. (일반적으로 디바이스가 세로 모드일 때의 dp 너비 , 사용법: layout-sw800dp)

    예1)

    res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

    res/layout-sw600dp/main_activity.xml # For 7” tablets (600dp wide and bigger)

    res/layout-sw720dp/main_activity.xml # For 10” tablets (720dp wide and bigger)

    예2)

    res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

    res/layout-w600dp/main_activity.xml # Multi-pane (any screen with 600dp available width or more)

    'Android' 카테고리의 다른 글

    [Android]strings.xml 사용시 팁  (0) 2012.08.24
    [Android]다국어 지원시 TIP  (0) 2012.08.21
    [Android] 키보드 숨기기/보이기  (0) 2012.07.19
    [Android]안드로이드 라이프 사이클  (0) 2012.06.21
    [Android]APIDemo 순서입니다.  (0) 2012.05.31
    1. 키보드 감추기
    EditText editText = (EditText) findViewById(R.id.myEdit);
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

    2. 키보드 보여주기
    EditText editText = (EditText) findViewById(R.id.myEdit);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);

    위 코드로 안보이는 경우 아래코드도 시도해보세요
    - imm.showSoftInputFromInputMethod (editText .getApplicationWindowToken(),InputMethodManager.SHOW_FORCED);

    onCreate등에서 제대로 동작하지 않는다면
    Handler로 post를 해서 위 코드를 실행시켜보세요.

    3. 키보드 토글 - 위 두가지 방법으로 안되는 경우 다음과 같은 코드로 동작하는 경우가 있습니다.
    imm.toggleSoftInputFromWindow(editText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

    4. 액티비티 시작시 자동으로 키보드 보여주기
    AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateVisible" 혹은 "stateAlwaysVisible"삽입

    5. 액티비티 시작시 자동으로 키보드 보여주지 않기
    AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateHidden" 혹은 "stateAlwaysHidden" 삽입

    6. 에디트 텍스트 선택해도 키보드 안뜨게 하기
    EditText xml 속성에서 inputType 을 0으로 주면 안뜹니다.

     

    'Android' 카테고리의 다른 글

    [Android]다국어 지원시 TIP  (0) 2012.08.21
    [Android] DPI 구하기!  (0) 2012.07.19
    [Android]안드로이드 라이프 사이클  (0) 2012.06.21
    [Android]APIDemo 순서입니다.  (0) 2012.05.31
    [Android]D-day 계산기 만들어보기.  (0) 2012.05.29