티스토리 뷰

     // 속성창에 설정된 값--------------android:background="@drawable/backpattern"
        LinearLayout linear =(LinearLayout)findViewById(R.id.main_linear);
        linear.setBackgroundResource(R.drawable.backpattern);

 

안드로이드 폰의 슬라이드가 열리고(landscape),  닫혀서(portrait) 화면이 전환될 때 
필요한 처리를 삽입하는 부분입니다.

아래 코드와 같이 액티비티 코드 내에 onConfigurationChanged() 함수를 오버라이딩하여 사용하면 됩니다.

 
  @Override
  public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig);

      Log.i(LOGTAG, "=== onConfigurationChanged is called !!! ===");
           
   if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 슬라이드 닫힐때
    Log.i(LOGTAG, "=== Configuration.ORIENTATION_PORTRAIT !!! ===");   
   } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 슬라이드 열릴때
    Log.i(LOGTAG, "=== Configuration.ORIENTATION_LANDSCAPE !!! ===");   
   }
  }

 

 

안드로이드폰은 화면 회전이 지원된다.

키보드를 열거나 닫으면 가로보기/세로보기로 전환이 되는데,
이때 UI가 새로 그려지면서 Activity의 onDestroy()와 onCreate() 가 수행된다.

위 과정이 수행되고 나면,
Activity 에서 가지고 있었던 변수들(field 도 포함)이 초기 상태로 된다.

만약, 코드에서 Thread를 만들어 돌아가는 중이었다면,
화면 회전을 한 후에는 사라지는 현상이다.

/**
Activity소스코드를 보면, 타입이 HashMap<String, Object>이고, null 을 리턴하고 있다.
유지해야할 데이터가 한개라면 그 Object를 바로 리턴해도 된다. */
@Override
public Object onRetainNonConfigurationInstance() {
       HashMap<String, Object> map = new HashMap<String, Object>();
       map.put("worker", worker);
       map.put("var1", var1);
       map.put("var2", var2);
       return map;
}
}

/**
onCreate의 적당한 부분에 이전 데이터를 복원하는 코드를 넣어준다.
여기에서는 restore() 를 따로 정의했다. */
@Override
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       ...
       ...
       restore();
       ...
       ...
}

/**
이전 데이터를 복원한다 */
@SuppressWarnings("unchecked")
private void restore() {
       Object o = getLastNonConfigurationInstance();
       if(o!=null){
              //Map형태로 리턴했기때문에 casting 해서 사용한다.
              HashMap<String, Object>map = (HashMap<String, Object>) o;
              this.worker = (Thread) map.get("worker");
              this.var1 = (String) map.get("var1");
              this.var2 = (String) map.get("var2");
       }
}

화면이 회전되거나 종료가 될때, onDestroy()가 호출되는데,
다음과 같이 구분해서 종료될때의 처리를 해 줄 수 있다.

@Override
protected void onDestroy() {
       Log.d(tag, "onDestroy" + " isFinishing : " +isFinishing());
       if(isFinishing()){
              //isFinishing()은 진짜로 프로그램이 종료될때는 true 값이다.
              // 회전할때는 당연히 false
              worker.interrupt();
              worker=null;
       }
       super.onDestroy();
}

 

Android 프로그래밍중 화면을 가로로 할지 세로로 할지를 정할수 있습니다.
우선 가상 머신을 실행 시키도록합니다.

위의 화면은 세로로 보이는 기본 화면 입니다.

이후 Ctrl + F11을 누르시면
가로 화면으로 전환됩니다.

아래의 화면은 가로로 설정된 화면의 모습입니다.

추가 적으로 한 가지 더 설명 드리자면

프로그램 개발시 강제로 가로로 혹은 세로로 고정해야 할경우가 있습니다.
(이것을 설정하지 않을경우 모바일의 위치에 따라 가로 혹은 세로로 모드가 변경될것입니다.)

고정 방법은
Project->AndroidManiFest.XML에서

        <activity android:name=".Memory"
                  android:label="@string/app_name">
Activity 부분에

android:screenOrientation="portrait"(세로 고정) 
혹은
android:screenOrientation="landscape"(가로 고정)
을 추가 하여 줍니다


[츨차] http://blog.naver.com/macyoo
 [원본] http://blog.naver.com/macyoo/100106661982
댓글