본문 바로가기

플밍 is 뭔들/안드로이드_인강

07-1. 액티비티

※ 액티비티란?
 - 하나의 화면(뷰와 뷰그룹을 포함시키고 있다) 액티비티가 모여 하나의 어플리케이션이 된다

※ 액티비티 제작 과정
  1. 엑티비티 레이아웃 제작 ex)ActivityMain
  2. Activity를 상속받아 엑티비티 파일(.java)제작 ex)MainActiivty
  3. 매니페이스트에 엑티비티 정보 추가

※ 액티비티 Life Cycle
 - onCreate : 액티비티 초기화
 - onPause : 앱이 백그라운드로 빠져있는 상태 ex)앱실행중 전화가왔다, 홈키를 눌렀다...등등
              앱을 종료 상태(onDestroy) 혹은 onResume 상태로 돌아가 백그라운드에 빠져있던 앱을 다시 사용 할 수도 있다.
              onPause 상태는 액티비티 종료 가능 단계로써 만약 어떤 사정에 의해서 앱이 강제 종료 되어도 이 단계는 꼭 
   거친다. 그렇기 때문에 종료전 저장해야될 데이터나 환경설정 같은 것은 이 단계에서 해줘야 한다. 
 - onCreate -> onStart -> onResume 상태를 거쳐 어플리케이션이 실행되어 사용자가 사용하는 화면까지 이동한다.
   onPause -> onStop -> onDestroy 상태를 거쳐 어플리케이션이 종료된다.

사진출처 : 서울위즈 앱 창업자를 위한 안드로이드 실무 동영상

※ 액티비티 이동
 - Intent 객체를 이용하여 이동한다.

MainActivity
public class MainActivity extends Activity {
      
      Button button;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            Log.i("MainActivity", "onCreate() 생명주기 test");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);   
            
            button = (Button) findViewById(R.id.bt_move_activity);
            button.setOnClickListener(onclick);
      }
      
      OnClickListener onclick = new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                  switch(v.getId()){
                  case R.id.bt_move_activity:
                        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                        startActivity(intent);
                        break;
                        
                  default :
                        break;
                        
                  }
            }
      };
}

SecondActivity
public class SecondActivity extends Activity {
      
      Button btn ;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            
            btn = (Button) findViewById(R.id.move_main);
            btn.setOnClickListener(onclick);
      }
      
      OnClickListener onclick = new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                  // TODO Auto-generated method stub
                  switch(v.getId()){
                  case R.id.move_main :
                        Intent intent = new Intent(SecondActivity.this, MainActivity.class);
                        startActivity(intent);
                        break;
                  default :
                        break;
                  
                  }
                  
            }
      };
}

Main_activity
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
      android:orientation="vertical"
    tools:context="com.example.androidex.MainActivity" >
    <Button
        android:id="@+id/bt_move_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="액티비티 이동"
        />
       
</LinearLayout>

Second_activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   
    <TextView
        android:id="@+id/textView"
      android:layout_width ="match_parent"
      android:layout_height="wrap_content"
      >    
    </TextView>
   
    <Button
        android:id="@+id/move_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인화면 이동">
    </Button>
   
</LinearLayout>

AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidex"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="21" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity
            android:name="com.example.androidex.SecondActivity"
            android:label="@string/activity_name">
        </activity>
    </application>
</manifest>

※ 가로화면 세로화면 설정
 - 총 2가지의 방법이 있다.
  1. 레이아웃 자체에서 설정하기 (AndroidManifest .xml 파일에서 해당액티비티에 속성값으로 주기)

AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidex"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="21" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity
            android:name="com.example.androidex.SecondActivity"
            //가로화면으로 설정하는 부분
            android:screenOrientation="landscape"
            android:label="@string/activity_name">
          
        </activity>
    </application>
</manifest>

  1. 소스코드에서 설정해주기 (단 setContextView 함수 이전에 가로화면 설정 함수를 사용 해주어야 한다.)
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

MainActivity
public class SecondActivity extends Activity {
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);분
            //가로화면으로 설정하는 부분
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setContentView(R.layout.activity_second);
            
      }
}