프로그래밍/안드로이드 앱

004. Example02_Activity와 화면이동

산을좋아한라쯔 2013. 11. 11. 17:13
반응형

다음과 같은 앱을 만들어 보자. 익히게 되는 것은 두 개의 Activity를 만들고, 다른 Activity를 콜하는 방법.

 

 

 

1. New Project 만들기

"File -  New - Other... - Android Application Project"를 해서, Application Name = AndroidEx1으로 하고, 나머지는 모두 디폴트값으로 해서 새 프로젝트 생성한다. 

 

 

 

 

 

 

2. 안드로이드 폰 레이아웃 설정

activity_main.xml의 Graphical Layout에서, 안드로이드폰에 마우스 우클릭 "Change Layout"해서, Linear Layout(Vertical) 선택

 

 

 

 

 

3. MainActivity에 컴퍼넌트 배치

  • Palette에서 TextView, EditText, Button을 각각 안드로이드폰 윈도우에 드래그해서 배치
    • 앞에서 레이아웃을 LinearLayout(Vertical)로 미리 지정했기에, 위로부터 아래로 차례차례 배치될 것임
    • EditText는 Palette에서 "Text Fields"밑에 "abc"라는 아이콘으로 보임
  • Id이름 변경
    • TextView: 이름 변경하지 않음 (이 TextView의 내용을 변경하지 않을 것이기에, 굳이 이름 변경할 필요 없음)
    • EditText: inputText
    • Button: newWindowButton
  • TextView의 Text변경
    • TextView.text = Main
  • 컴퍼넌트에 대한 Layout Parameter변경
    • TextView: Width = fill_parent
    • EditText: Width=fill_parent 

 

 

 

위와 같이 하고 activity_main.xml파일 내용을 보면 아래와 같이 되어 있을 것이다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
  <TextView
      android:id="@+id/textView1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="Main" />
  <EditText
      android:id="@+id/inputText"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:ems="10" >
    <requestFocus />
  </EditText>
  <Button
      android:id="@+id/newWindowButton"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Window" />
</LinearLayout>

 

4. 다른 Activity 생성

  • Eclipse의 Package Explorer에서 src밑에 있는 com.example.androidex2를 선택하고 마우스 우클릭해서, New-Class하고
    • 클래스 Name = "NewActivity"
    • Superclass = android.app.Activity

 

 

 

 

 

 

5. activity_new.xml 생성

  • Package Explorer에서 res/layout을 선택하고 마우스 우클릭해서, "New-Other"에서 Android XML File 선택하고, File이름으로 "activity_new.xml" 입력

 

 

 

 

 

 

  • activity_new.xml에 컴퍼넌트 배치
    • activity_new.xml선택하고, 하단부 탭에서 Graphical Layout선택해서, 그래픽모드로 변환
    • 안드로이드폰 윈도우에서 마우스 우클릭 - Change Layout 해서, LinearLayout(Vertical) 선택
    • 위로부터 차례로 TextView, TextView, Button 컴퍼넌트 배치
  • 컴퍼넌트 속성 바꾸기
    • 맨 위 TextView.Name = textView1  (변경없음)
    • 맨 위 TextView.Text = New
    • 맨 위 TextView.Layout.Width =  fill_parent
    • 두번째 TextView.Name = outputText
    • 두번째 TextView.Layout.Width = fill_parent
    • Button.Name = closeButton
    • Button.Text = "Close"

위와 같이 하면 다음과 같이 된다.

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
  <TextView
      android:id="@+id/textView1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="New" />
  <TextView
      android:id="@+id/outputText"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="TextView" />
  <Button
      android:id="@+id/closeButton"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Close" />
</LinearLayout>

 

6. AndroidManifest에 NewActivity 추가

앞에서 만든 newActivity를 AndroidManifest.xml에 추가해야한다. 다음과 같이 한다.

  • Package Explorer에서 AndroidManifest.xml을 선택하고 마우스 우클릭해서, Open With - Android Common XML Editor

 

 

  • activity항목에 NewActivity 추가

<activity
            android:name=".NewActivity"
            android:label="@string/app_name">            
 </activity>

 

위 항목이 추가된 전체 AndroidManifest.xml내용은 다음과 같다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidex2"
    android:versionCode="1"
    android:versionName="1.0" >
  <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="18" />
  <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.androidex2.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=".NewActivity"
        android:label="@string/app_name">
    </activity>
  </application>
</manifest>

 

7. MainActivity 수정

이제 MainActivity에서 버튼을 누르면 EditText의 내용이 NewActivity에 전달되면서 새로운 화면이 표출되도록 하자.

Package Explorer에서 MainActivity.java를 더블 클릭해서, 다음과 같이 코딩한다. 

 

MainActivity화면에서 "newWindow"버튼을 누르면, 새로운 Activity화면이 뜨도록하는 코딩이다.

먼저 화면에 떠 있는 Button과 EditText에 대한 인스턴스를 findViewById메서드를 이용해서 가져오고,

  Button newWindowButton = (Button)findViewById(R.id.newWindowButton);
  final EditText inputText = (EditText)findViewById(R.id.inputText);

 

버튼에 대한 응답을 하는 setOnClickListener메서드를 작성한다.

메서드내에서는, inputText에 사용자가 입력한 문자열을 NewActivity에 넘겨주면서 Activity를 시작시킨다. 이 때, 다른 Activity에 특정 데이터를 넘겨주기위해서 Intent클래스를 이용한다. 순서는 Intent인스턴스를 생성하고, 그 인스턴스에 putExtra메서드를 이용해서 데이터를 지정시키고, Intent인스턴스를 인자로해서 startActivity메서드를 실행시킨다.

    String str = inputText.getText().toString();
    Intent intent = new Intent(getApplicationContext(), NewActivity.class);
    intent.putExtra("PARAM1", str);
    startActivity(intent);

 

위 코드에서, 기존에 import되어있지 않은 클래스들이 사용되었으므로, 필요한 클래스들에 대해서는 import하도록해야한다.

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

 

 

8. NewActivity 수정

이제, MainActivity의 버튼 클릭에 의해 표출되게되는 NewActivity에 대해, 파라미터로 전달받은 메시지 데이터를 표출하도록 코딩하자. 

 

NewActivity화면이 표출될 때 수행되는 메서드는 onCreate이다.

생성되면서 내부 content는 activity_new를 따른다고 지정하고,

  setContentView(R.layout.activity_new);

Intent를 가져와서, 이미 MainActivity에서 "PARAM1"으로 저장해놓은 데이터를 가져온다. 이 데이터는 MainActivity화면에서 사용자가 EditText에다 입력한 문자열이다. 이 문자열을 outputText.setText를 이용해서 표출한다.

 

NewActivity화면에는 closeButton이 있다. 이 버튼을 누르면 NewActivity를 종료한다.

   Button closeButton = (Button)findViewById(R.id.closeButton);
  closeButton.setOnClickListener(
   new View.OnClickListener() {     
    public void onClick(View v) {
     finish();
    }
   }
  ); 

 

 

9. Run

AndroidEx2프로젝트를 선택하고 마우스 우클릭해서, "Run-Run Configuration"을 통해서 AndroidEx2용 Run을 만든다.

    • Name=Ex2
    • Project = AndroidEx2
    • Target탭 Deployment Target Selection Mode = Always prompt to pick device

Run을 하고, MainActivity의 EditBox에 문자열을 입력하고 "New Window"버튼을 눌러서 NewActivity화면이 제대로 뜨는지 확인한다.

이 글의 맨 위 화면처럼 표출되었으면 성공.

 

전체 소스 

AndroidEx2.zip

 

 

* 위 소스에는 bin폴더가 비어있다(파일크기 줄이기 위해). 따라서, Eclipse에 import하고, Build를 새로 해야할 것이다.

 

 

-끝-

 

AndroidEx2.zip
0.61MB
반응형

'프로그래밍 > 안드로이드 앱 ' 카테고리의 다른 글

006. Example04_SurfaceView  (0) 2013.11.12
005. Example03_Canvas  (0) 2013.11.12
003. Example01_Simple  (0) 2013.11.11
002. HelloAndroid 앱 만들기  (0) 2013.11.08
001.개발 환경 구축하기  (0) 2013.05.29