이번에는 Activity 를 새로 만들고, 만든 Activity 를 시작하는 방법에 대해 알아본다.
Android 는 Activity 를 시작시킨 때 Intent 를 기반으로 하여 시작시킨다. 이 Intent 에 메인 뷰의 EditText 로 입력받은 String 을 추가하여 새로 만든 Activity 를 시작할 때 넘겨주고, Activity 는 TextView 를 포함하는 Layout (ViewGroup)을 통해 전달받은 메시지를 표시해주는 방식이다.
▌버튼 눌렸을 때 호출 될 메소드 정의하기
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"/>
▌새로운 Activity 실행위한 Intent 생성하기
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class); // Intent 를 신규 생성, DisplayMessageActivity 를 실행하기 위한 Intent 를 생성함
EditText editText = (EditText) findViewById(R.id.edit_message); // 현재 Activity 의 OnCreate 에서 처리된 Bundle 의 XML 내에 있는 id 값에 해당하는 View 를 가져옴
String message = editText.getText().toString(); // EditText 의 값 가져옴
intent.putExtra(EXTRA_MESSAGE, message); // EXTRA_MESSAGE 를 Key 로 하고 내용을 message 로 하는 데이터를 Intent 에 추가 함. Key-Value Pair 의 extra 를 Intent 에 추가함
startActivity(intent);
}
Intent intent = new Intent(this, DisplayMessageActivity.class); // Intent 를 신규 생성, DisplayMessageActivity 를 실행하기 위한 Intent 를 생성함
EditText editText = (EditText) findViewById(R.id.edit_message); // 현재 Activity 의 OnCreate 에서 처리된 Bundle 의 XML 내에 있는 id 값에 해당하는 View 를 가져옴
String message = editText.getText().toString(); // EditText 의 값 가져옴
intent.putExtra(EXTRA_MESSAGE, message); // EXTRA_MESSAGE 를 Key 로 하고 내용을 message 로 하는 데이터를 Intent 에 추가 함. Key-Value Pair 의 extra 를 Intent 에 추가함
startActivity(intent);
}
public final static String EXTRA_MESSAGE = "com.goodjoon.helloandroid.MESSAGE";
▌Activity 추가를 위한 과정
- Activity XML 생성
- strings.xml 에 Activity Title 추가
- Content XML 생성
- Android Manifest 에 Activity 등록
- Activity 클래스 작성
▌신규 Activity 추가 - Studio 의 New Activity 기능 사용하여 추가하기
원하는 Package 에서 우측클릭>New>Activity>Blank Activity 를 눌러서 Activity 를 추가한다.
Activity 이름을 주고, 중간의 Hierarchical Parent 에서 "..." 을 눌러 메인 Activity 인 HelloActivity 를 선택한다.
□ Hierarchical Parent
Activity 를 추가할 때 Hierarchical Parent 를 주면, 기본적인 Navigation 동작이 추가된다. up Navigation 버튼이 Navigation Bar 에 추가되고, Back 버튼을 눌렀을 때 Parent Activity 가 호출되는 등의 Action 이 실행된다.
<androidManifest.xml> 내용 중
<activity android:name=".DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName=".HelloActivity" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.goodjoon.helloandroid.HelloActivity" /> </activity> 위에서 android:parentActivityName=".HelloActivity" 가 추가된 것을 볼 수 있다.
나중에 수동으로 Activity 를 추가하면 저렇게 parentActivity 를 주면 된다.
|
위 과정으로 추가하면
- Activity XML 생성
- Content XML 생성
- AndroidManifest.xml 에 Activity 등록
- string.xml 에 Activity Title 등록
- Activity 클래스 추가
와 같은 과정이 자동으로 실행된다
- Activity XML 생성
- Content XML 생성
Content XML 이 생성되면 아래와 같이 RelativeLayout 요소의 마지막에 android:id="@+id/content" 를 하여 id 를 하나 부여해주어 Code 에서 findViewById() 로 쉽게 Layout 을 갖고오게 하자.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
...
android:id="@+id/content">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
...
android:id="@+id/content">
- Activity 클래스에서 메시지 받아 출력해주기
TextView 뷰를 하나 추가하고, Intent 의 Message 를 TextView 에 출력하도록 할 것이다.
Layout XML 에 추가하는 방법 말고, Activity 클래스에서 코드로 추가하는 방법으로 해본다.
일단, 자기 Activity 를 실행시킨 Intent 내에 Extra 데이터(메시지)를 가져오고,
TextView 뷰를 생성한 다음, 이 뷰를 Layout 을 가져와 그 Layout 에 추가하는 작업을 한다.
코드는 아래와 같다. 자동 생성된 Activity 클래스의 onCreate 의 하단에 해당 내용을 추가하면 된다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Activity 는 자신을 시작시킨 Intent 를 가져올 수 있음
// Intent 에서 메시지를 가져오도록 함
Intent intent = this.getIntent();
String message = intent.getStringExtra(HelloActivity.EXTRA_MESSAGE);
// TextView Object 를 만든다
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
// 만들어진 TextView 를 RelativeLayout 에 붙인다
RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);
layout.addView(textView);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Activity 는 자신을 시작시킨 Intent 를 가져올 수 있음
// Intent 에서 메시지를 가져오도록 함
Intent intent = this.getIntent();
String message = intent.getStringExtra(HelloActivity.EXTRA_MESSAGE);
// TextView Object 를 만든다
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
// 만들어진 TextView 를 RelativeLayout 에 붙인다
RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);
layout.addView(textView);
}
▌실행 결과
실행 결과는 위와 같다. 텍스트를 입력하고 "보내기" 버튼을 누르면 Intent 를 생성하여 ExtraData 로 Message 를 추가하고, DisplayMessageActivity 를 생성한 Intent 로 시작시킨다.(실행 보다는 '시작' 이 적합한 단어라고 생각한다)
반응형
'Software Development > Mobile' 카테고리의 다른 글
Auto Completion 관련한 단축키들 (0) | 2016.02.13 |
---|---|
안드로이드 개발 #4 - 첫 UI 개발 (1) | 2016.02.10 |
안드로이드 개발 #3 - 앱 실행하기 (0) | 2016.02.08 |
안드로이드 개발 #2 - 새 프로젝트 살펴보기 (0) | 2016.02.06 |
안드로이드 개발 #1 - Android Studio 설치 및 새프로젝트 생성 (0) | 2016.02.06 |