The Android Developer Challenge is back! Submit your idea before December 2.

다른 활동 시작

이전 과정을 완료했다면 텍스트 필드와 Send 버튼이 있는 단일 화면으로 구성된 활동을 보여주는 앱이 있을 것입니다. 이 과정에서는 사용자가 Send 버튼을 탭할 때 메시지를 표시하도록 새로운 활동을 시작하는 MainActivity에 몇 가지 코드를 추가합니다.

Send 버튼에 응답

다음 단계를 따라 Send 버튼을 탭할 때 호출되는 MainActivity 클래스에 메서드를 추가하세요.

  1. app > java > com.example.myfirstapp > MainActivity 파일에서 다음 sendMessage() 메서드 스터브를 추가합니다.

    Kotlin

        class MainActivity : AppCompatActivity() {
            override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_main)
            }
    
            /** Called when the user taps the Send button */
            fun sendMessage(view: View) {
                // Do something in response to button
            }
        }
        

    자바

        public class MainActivity extends AppCompatActivity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            }
    
            /** Called when the user taps the Send button */
            public void sendMessage(View view) {
                // Do something in response to button
            }
        }
        

    Android 스튜디오에서는 메서드 인수로 사용되는 View 클래스를 확인할 수 없으므로 오류가 발생할 수도 있습니다. 오류를 해결하려면 View 선언을 클릭하고 커서를 그 위에 둔 채로 Alt+Enter(Mac의 경우 Option+Enter)를 눌러 빠른 수정을 실행합니다. 메뉴가 표시되면 Import class를 선택합니다.

  2. activity_main.xml 파일로 돌아가 다음과 같이 버튼에서 메서드를 호출합니다.
    1. 레이아웃 편집기에서 버튼을 선택합니다.
    2. Attributes 창에서 onClick 속성을 찾고 이 속성의 드롭다운 목록에서 sendMessage [MainActivity]를 선택합니다.

    이제 버튼을 탭하면 시스템에서 sendMessage() 메서드를 호출합니다.

    이 메서드의 세부정보를 메모해 두세요. 시스템에서 메서드를 android:onClick 속성과 호환되는 것으로 인식하는 데 필요합니다. 특히 이 메서드에는 다음과 같은 특성이 있습니다.

    • 공개 액세스
    • 무효 또는 Kotlin에서는 암시적 단위 반환 값
    • View가 유일한 매개변수. 1단계 마지막에 클릭하는 것이 View 개체입니다.
  3. 다음은 이 메서드를 채워 텍스트 필드의 콘텐츠를 읽고 텍스트를 다른 활동으로 전달합니다.

인텐트 빌드

Intent는 개별 구성요소(예: 두 개의 활동) 간에 런타임 바인딩을 제공하는 개체입니다. Intent는 어떤 작업을 하려는 앱의 의도를 나타냅니다. 매우 다양한 작업에 인텐트를 사용할 수 있지만 이 과정에서는 인텐트가 다른 활동을 시작합니다.

MainActivity에서 다음과 같이 EXTRA_MESSAGE 상수와 sendMessage() 코드를 추가하세요.

Kotlin

    const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }

        /** Called when the user taps the Send button */
        fun sendMessage(view: View) {
            val editText = findViewById<EditText>(R.id.editText)
            val message = editText.text.toString()
            val intent = Intent(this, DisplayMessageActivity::class.java).apply {
                putExtra(EXTRA_MESSAGE, message)
            }
            startActivity(intent)
        }
    }
    

자바

    public class MainActivity extends AppCompatActivity {
        public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        /** Called when the user taps the Send button */
        public void sendMessage(View view) {
            Intent intent = new Intent(this, DisplayMessageActivity.class);
            EditText editText = (EditText) findViewById(R.id.editText);
            String message = editText.getText().toString();
            intent.putExtra(EXTRA_MESSAGE, message);
            startActivity(intent);
        }
    }
    

Android 스튜디오에서 Cannot resolve symbol 오류가 다시 발생할 것입니다. 오류를 해결하려면 Alt+Enter(Mac의 경우 Option+Return)를 누르세요. 다음을 가져오게 됩니다.

Kotlin

    import androidx.appcompat.app.AppCompatActivity
    import android.content.Intent
    import android.os.Bundle
    import android.view.View
    import android.widget.EditText
    

자바

    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    

DisplayMessageActivity에 오류가 여전히 남아 있지만 괜찮습니다. 다음 섹션에서 해결할 수 있습니다.

sendMessage()에서 이루어지는 작업은 다음과 같습니다.

  • Intent 생성자가 ContextClass, 두 매개변수를 사용합니다.

    Context 매개변수가 먼저 사용되는데 Activity 클래스가 Context의 서브클래스이기 때문입니다.

    시스템에서 Intent,를 전달하는 앱 구성요소의 Class 매개변수는 이 경우 시작할 활동입니다.

  • putExtra() 메서드가 인텐트에 EditText 값을 추가합니다. Intent는 데이터 유형을 extras라는 키-값 쌍으로 전달할 수 있습니다.

    다음 활동에서 키를 사용하여 텍스트 값을 검색하기 때문에 키는 공개 상수 EXTRA_MESSAGE입니다. 앱의 패키지 이름을 접두사로 사용해 인텐트 extras의 키를 정의하는 것이 좋습니다. 그러면 앱이 다른 앱과 상호작용하는 경우 키가 고유하게 유지됩니다.

  • startActivity() 메서드는 Intent에 의해 지정된 DisplayMessageActivity의 인스턴스를 시작합니다. 이제 클래스를 만들어야 합니다.

두 번째 활동 만들기

두 번째 활동을 만들려면 다음 단계를 따르세요.

  1. Project 창에서 app 폴더를 마우스 오른쪽 버튼으로 클릭하고 New > Activity > Empty Activity를 선택합니다.
  2. Configure Activity 창에서 Activity Name에 'DisplayMessageActivity'를 입력합니다. 다른 모든 속성은 기본값으로 그대로 두고 Finish를 클릭합니다.

Android 스튜디오는 다음 세 가지 작업을 자동으로 실행합니다.

  • DisplayMessageActivity 파일을 만듭니다.
  • 레이아웃 파일 activity_display_message.xml을 만들고 이 파일은 DisplayMessageActivity 파일과 일치합니다.
  • AndroidManifest.xml에 필수 <activity> 요소를 추가합니다.

앱을 실행하고 첫 번째 활동에서 버튼을 탭하면 두 번째 활동이 시작되지만 이 활동은 비어 있습니다. 두 번째 활동이 템플릿에서 제공한 빈 레이아웃을 사용하기 때문입니다.

텍스트 뷰 추가

레이아웃 상단 중앙에 정렬된 텍스트 뷰
그림 1. 레이아웃 상단 중앙에 정렬된 텍스트 뷰

새로운 활동에는 빈 레이아웃 파일이 포함됩니다. 다음 단계를 따라 텍스트 뷰를 메시지가 표시되는 곳에 추가하세요.

  1. app > res > layout > activity_display_message.xml 파일을 엽니다.
  2. 툴바에서 Enable Autoconnection to Parent 를 클릭합니다. 그러면 자동연결이 사용 설정됩니다. 그림 1을 참조하세요.
  3. Palette 패널에서 Text를 클릭하고 TextView를 레이아웃으로 드래그한 다음 레이아웃의 상단 중앙 쯤에서 놓아 표시되는 수직 선에 맞춥니다. 자동 연결은 수평 중앙에 뷰를 배치하기 위해 왼쪽과 오른쪽 제약 조건을 추가합니다.
  4. 텍스트 뷰 상단에서 레이아웃 상단까지 제약 조건을 하나 더 만들어 그림 1과 같이 표시되도록 합니다.

선택사항으로 Attributes 창의 Common Attributes 패널에서 textAppearance를 확장하고 textSizetextColor와 같은 속성을 변경하면 텍스트 스타일을 조정할 수 있습니다.

메시지 표시

이 단계에서는 두 번째 활동을 수정하여 첫 번째 활동에서 전달된 메시지를 표시합니다.

  1. DisplayMessageActivity에서 다음 코드를 onCreate() 메서드에 추가합니다.

    Kotlin

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_display_message)
            
            // Get the Intent that started this activity and extract the string
            val message = intent.getStringExtra(EXTRA_MESSAGE)
    
            // Capture the layout's TextView and set the string as its text
            val textView = findViewById<TextView>(R.id.textView).apply {
                text = message
            }
        }
        

    자바

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_message);
            
            // Get the Intent that started this activity and extract the string
            Intent intent = getIntent();
            String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    
            // Capture the layout's TextView and set the string as its text
            TextView textView = findViewById(R.id.textView);
            textView.setText(message);
        }
        
  2. Alt+Enter(Mac의 경우 Option+Return)를 눌러 다음과 같이 다른 필요한 클래스를 가져옵니다.

    Kotlin

        import androidx.appcompat.app.AppCompatActivity
        import android.content.Intent
        import android.os.Bundle
        import android.widget.TextView
        

    자바

        import androidx.appcompat.app.AppCompatActivity;
        import android.content.Intent;
        import android.os.Bundle;
        import android.widget.TextView;
        

상향 탐색 추가

기본 진입점이 아닌 앱의 각 화면(홈 화면이 아닌 모든 화면)은 사용자를 앱 계층 구조에서 논리적 상위 화면으로 안내하는 탐색을 제공해야 합니다. 이렇게 하려면 앱 바에서 Up 버튼을 추가하세요.

Up 버튼을 추가하려면 AndroidManifest.xml 파일에서 어떤 활동이 논리적 상위 요소인지 선언해야 합니다. app > manifests > AndroidManifest.xml에서 파일을 열고 DisplayMessageActivity<activity> 태그를 찾아 다음으로 바꿉니다.

    <activity android:name=".DisplayMessageActivity"
              android:parentActivityName=".MainActivity">
        <!-- The meta-data tag is required if you support API level 15 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
    

이제 Android 시스템에서 Up 버튼을 앱 바에 자동으로 추가합니다.

앱 실행

툴바에서 Apply Changes 를 클릭하여 앱을 실행합니다. 앱이 열리면 텍스트 필드에 메시지를 입력하고 Send를 탭하여 두 번째 활동에 이 메시지가 표시되는지 확인합니다.

열린 앱. 왼쪽 화면은 입력된 텍스트, 오른쪽은 텍스트가 표시된 화면
그림 2. 열린 앱. 왼쪽 화면은 입력된 텍스트, 오른쪽은 텍스트가 표시된 화면

이것으로 첫 번째 Android 앱을 빌드했습니다.

Android 앱 개발에 관한 기본 사항을 계속 알아보려면 첫 앱 빌드로 돌아가 거기서 제공되는 다른 링크를 따라가세요.