Tag Archives: 안드로이드

[Android] 전역 변수(Global Variables) 사용하기

안드로이드에서 전역변수란 어떤 의미를 가질까요? 안드로이드는 기본적으로 엑티비티의 모음을 가지고 관리하는 어플리케이션(Application)이라는 객체가 있습니다.

엑티비티는 기본적으로 계속해서 생성되고 소멸되기 때문에 여기에 전역으로 사용할 변수를 보관한다는것이 굉장히 어려운 일이지만 Application은 어플리케이션의 라이프사이클 그 자체이기 때문에 전역변수의 보관용으로 그나마 적절해 보입니다.

이것을 구현하기 위해서는 다음과 같은 방법을 사용하시면 됩니다.

1. AndroidManifest.xml에 Application 객체 정의

<application
  android:name=".MyApplication"
  android:icon="@drawable/icon" android:label="@string/app_name">
  ...
</application>

2. Application을 상속받은 클래스 구현

public class MyApplication extends Application
{
  private String mGlobalString;

  public String getGlobalString()
  {
    return mGlobalString;
  }

  public void setGlobalString(String globalString)
  {
    this.mGlobalString = globalString;
  }
}

3. 전역변수의 활용

public class GlobalVariablesActivity extends Activity
{
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MyApplication myApp = (MyApplication) getApplication();
    myApp.setGlobalString("전역 변수 설정");

    Log.e("GlobalVariablesActivity", myApp.getGlobalString());
  }
}

사용자 삽입 이미지

[Java/Android] DIP to Pixel, Pixel to DIP 변환 유틸리티

안드로이드에서는 기본적으로 화면 해상도에 의존적이지 않는 화면 구성을 하여야만 합니다. 하지만 동적으로 UI를 구축한다거나 또는 복잡한 레이아웃에서는 그것이 쉽지가 않죠. 그경우엔 픽셀 단위의 글을 자유자재로 DIP으로 혹은 그 반대로 변환할 수 있어야 합니다. 다음은 간단히 사용할 수 있는 예제입니다.

[code]public class DisplayUtil
{
  private static final float DEFAULT_HDIP_DENSITY_SCALE = 1.5f;
  /**
   * 픽셀단위를 현재 디스플레이 화면에 비례한 크기로 반환합니다.
   *
   * @param pixel 픽셀
   * @return 변환된 값 (DP)
   */
  public static int DPFromPixel(int pixel)
  {
    Context context = BaseApplication.getContext();
    float scale = context.getResources().getDisplayMetrics().density;
    
    return (int)(pixel / DEFAULT_HDIP_DENSITY_SCALE * scale);
  }
 
  /**
   * 현재 디스플레이 화면에 비례한 DP단위를 픽셀 크기로 반환합니다.
   *
   * @param  DP 픽셀
   * @return 변환된 값 (pixel)
   */
  public static int PixelFromDP(int DP)
  {
    Context context = BaseApplication.getContext();
    float scale = context.getResources().getDisplayMetrics().density;
    
    return (int)(DP / scale * DEFAULT_HDIP_DENSITY_SCALE);
  }
}[/code]