본문 바로가기

Android

[Android] 홍드로이드 기초 강의 - TextView, EditText, Intent 화면 전환

1. TextView

안드로이드 화면에서 Text를 표기하기 위해 사용하는 뷰 위잿입니다.

 

TextView를 사용하기 위해선 layout 파일에 <TextView ... />를 추가해주어야 합니다.

 

 

위의 이미지를 보면 2개의 TextView가 작성된 모습을 볼 수 있습니다.

 

TextView를 생성하면 기본적으로 layout_width, layout_height, text 속성이 표시됩니다.

layout_width는 가로 길이, layout_height는 세로 길이입니다.

속성값으로 정수를 넣을 수 있지만, text가 잘릴 수 있습니다.

 

주로 사용하는 속성값은 wrap_content와 match_parent입니다.

wrap_content는 TextView에 작성된 text의 사이즈에 맞춘다는 의미이고, match_parent는 상위 객체의 사이즈에 맞춘다는 의미입니다.

 

text 속성은 사용자에게 보여주고 싶은 텍스트를 작성하는 부분입니다.

 

testSize도 지정할 수 있는데 단위는 dp로, "Density independent pixels"의 줄임말입니다.

번역하면 밀도 독립 픽셀 단위입니다. 즉, 장치의 밀도에 상관없이 물리적으로 (거의) 동일한 크기를 갖습니다.

스마트폰이 발전함에 따라 다양한 크기와 해상도를 지원하는데 dp를 사용하면 동일한 사이즈로 text를 제공합니다.

 

 

1번째 TextView의 속성값을 살펴보겠습니다.

가로 길이는 상위 객체의 사이즈를 따르고, 세로 길이는 컨텐츠의 사이즈에 맞춥니다.

text의 사이즈는 30dp이며, 화면에 "TextView"라는 text를 표시합니다.

 

TextView는 text의 컬로도 지정할 수 있습니다.

 

 

2번째 TextView를 보면 textColor 속성이 있습니다.

16bit의 값을 직접 지정해주어도 되고, 좌측의 빨간 네모를 클릭해서 조절해도 됩니다.

좌측의 빨간 네모를 클릭하게 되면 아래와 같은 창이 나타나서 쉽게 조작할 수 있습니다.

 

 

아래의 이미지는 위의 코드가 적용된 화면입니다.

 

 

※ layout 화면에 있는 text를 클릭하면 작성된 코드 부분과 객체의 범위 등 다양한 정보를 쉽게 볼 수 있습니다.

 

2. EditText

EditText는 텍스트를 입력하고 수정하기 위한 사용자 인터페이스 요소입니다.

 

layout 파일에 <EditText ... />를 작성하면 사용할 수 있습니다.

 

 

TextView와 달리 EditText에는 id 속성이 추가되어 있습니다.

id 속성은 파일 내에서 고유한 이름을 의미합니다.

아래와 같이 중복된 id 속성값을 지정하면 오류가 발생합니다.

 

 

id 속성을 사용하면 자바 코드에서 객체를 생성해서 다양한 작업을 수행할 수 있습니다.

 

EditText는 입력 키보드를 지정할 수 있습니다.

예를 들어 전화번호, 숫자로 지정된 비밀번호 등을 작성하려면 inputType 속성을 "numericPassword"로 설정하면 됩니다.

numericPassword는 숫자만 허용하는 편집 텍스트를 생성하고, 숫자 키보드를 제공합니다.

 

 

※ inputType 속성 https://developer.android.com/training/keyboard-input/style

 

입력 방법 유형 지정  |  Android 개발자  |  Android Developers

입력 방법 유형 지정 모든 텍스트 필드에는 이메일 주소, 전화번호 또는 일반 텍스트와 같은 특정 유형의 텍스트를 입력해야 합니다. 따라서 시스템에서 적절한 소프트 입력 방법(예: 터치 키보

developer.android.com

 

3. Intent 화면 전환

애플리케이션에서 메인홈 - 로그인 화면 - 마이페이지 등의 순서로 화면이 전환되는 경험을 해보셨을 겁니다.

이때 사용되는 요소가 Intent입니다.

 

Intent는 안드로이드에서 특정 컴포넌트가 어떤 작업을 수행하는지를 저장하고 이를 전달하는 클래스입니다.

쉽게 말해서 컴포넌트 간의 통신을 담당하는 메신저입니다.

Intent는 Activity 시작, Service 시작, Broadcast 전달 등의 기능을 수행합니다.

Activity 시작에 대해서만 우선 설명드리겠습니다.

 

Activity는 애플리케이션 안의 단일 화면을 나타냅니다. 

Activity의 새로운 인스턴스를 시작하려면 Intent를 startActivity() 혹은 startActivityForResult()로 전달해야 합니다.

 

해당 기능을 사용하려면 2개의 화면을 준비해야 합니다.

하나는 MainActivity, 또 하나는 SubActivity라고 하겠습니다.

MainActivity(이하 main) 화면에서 EditText로 text를 작성하고 버튼을 클릭하면 SubActivity(이하 sub)로 화면이 전환되면서 작성된 text를 표시하도록 하겠습니다.

 

각각의 화면 구성은 다음과 같습니다.

 

MainActivity 화면

 

SubActivity 화면

 

먼저 main의 자바 코드입니다.

 

layout 파일이 2개이므로 어떤 파일을 사용해야 할지 지정해줘야 합니다.

 

setContentView(R.layout.activity_main);

 

EditText와 Button을 사용할 예정이므로 id값을 통해 객체를 생성해줍니다.

findViewById(R.id.아이디 값) 메소드를 사용해서 layout의 요소를 찾아줍니다.

 

et_test = findViewById(R.id.et_test);
btn_move = findViewById(R.id.btn_move);

 

Button을 클릭하면 event가 발생해야 하므로 아래와 같이 코드를 작성합니다.

 

btn_move.setOnClickListener(new View.OnClickListener() {	// Button 클릭 event 발생 시
    @Override
    public void onClick(View view) {
        str = et_test.getText().toString();		// EditText에 작성된 string 받아오기

        Intent intent = new Intent(MainActivity.this, SubActivity.class);
        intent.putExtra("str", str);		// SubActivity로 string 전송
        startActivity(intent); 			// 액티비티 이동

    }
});

 

※ id값을 통해서 EditText에 작성된 string을 쉽게 가져올 수 있습니다.

 

아래는 main의 전체 코드입니다.

 

package com.example.intentexample;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    private Button btn_move;	// 화면 전환 버튼
    private EditText et_test;	// EditText
    private String str;		// EditText에 작성된 string

    @Override
    protected void onCreate(Bundle savedInstanceState) {	// 화면 구성(초기화)
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);			// layout 설정

        et_test = findViewById(R.id.et_test);			// EditText 객체 생성

        btn_move = findViewById(R.id.btn_move);			// Button 객체 생성
        
        btn_move.setOnClickListener(new View.OnClickListener() {	// Button 클릭 event 발생 시
            @Override
            public void onClick(View view) {
                str = et_test.getText().toString();		// EditText에 작성된 string 받아오기

                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                intent.putExtra("str", str);		// SubActivity로 string 전송
                startActivity(intent); 			// 액티비티 이동

            }
        });

    }
}

 

다음은 sub의 자바 코드입니다.

 

sub는 main에서 작성된 string을 표시해야 되서 TextView를 사용해줍니다.

main에서와 마찬가지로 id값을 통해서 TextView의 객체를 생성합니다.

이후에 main에서 전송된 string을 받기 위해서 intent를 선언합니다.

 

tv_sub = findViewById(R.id.tv_sub);

Intent intent = getIntent();

 

intent를 활용해서 string을 변수에 저장하고, TextView에 반영합니다.

 

String str = intent.getStringExtra("str");

tv_sub.setText(str);

 

아래는 sub의 전체 코드입니다.

 

package com.example.intentexample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SubActivity extends AppCompatActivity {

    private TextView tv_sub;	// TextView

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        tv_sub = findViewById(R.id.tv_sub);		// TextView 객체 생성

        Intent intent = getIntent();			// Intent 생성
        String str = intent.getStringExtra("str");	// string 받아오기

        tv_sub.setText(str);				// 받어온 string 반영
    }
}

 

아래는 결과화면으로, 정상 작동하는 것을 알 수 있습니다.

 

 

main

sub