IT/Android studio

[Android] setText가 뭘까?

Buang 2022. 8. 21. 16:42
반응형

setText란 xml파일이 아닌 java파일에서

텍스트을 변경할 수 있게 해주는 것이다.

 

이게 도대체 무슨 소리일까?

 

 

*입문자를 대상으로 쓴 글이라

부연설명이 긴 편입니다. 이 점 참고해주시면 감사하겠습니다.


1. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/test1"
        android:text="안녕 세상아!"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

 

위에 엄청 긴 코드가 있다.

저 코드를 다 살펴볼 필요는 없다.

스크롤을 내려서 아래의 단 두 줄만 보면 된다.

 

   <TextView
        android:id="@+id/test1"
        android:text="안녕 세상아!" />

 

위의 세 줄을 설명해 보자면

 

1) TextView는 텍스트를 입력할 수 있는 박스를 생성할 때 쓰는 단어다.

파워포인트에서 글자를 입력할 땐 텍스트 박스를 생성하고

그 텍스트 박스 안에 글자를 넣는다. 이 원리와 비슷하다.

 

안드로이드 스튜디오에서도 글자를 입력하고 싶으면 텍스트 박스를 생성해줘야 한다.

TextView를 입력하면 텍스트를 입력할 수 있는 박스가 만들어지는 것이다.

 

 

2) android:text="안녕 세상아!"

 

텍스트 박스 안에 나는 "안녕 세상아!"라고 작성한 코드다.

 

 

3) android:id ="@+id/test1"

 

반려묘한테 이름을 붙여주듯이

TextView라는 텍스트 박스한테 test1 이라는 이름을 붙여줬다. 

 

이렇게 xml에 코드를 작성하고, java에도 코드를 작성해주면

아래와 같은 이미지가 뜬다.

 

 

 

자바에 쓴 코드는 뒤에서 설명할 거라 일단 일단 생략하려고 한다.

여기서 중요한 건 "안녕 세상아!"란 텍스트다.

나는 "안녕 세상아!"란 텍스트를 이제 "잘가 세상아!"라고 바꾸고 싶다.

 

그렇다면 어떻게 해줘야 할까?

 

   <TextView
        android:id="@+id/test1"
        android:text="안녕 세상아!" />

 

아까 위에서 봤던 두 줄 코드다.

여기서 "안녕 세상아!"를 "잘가 세상아!"로 바꿔주면 

텍스트가 바뀔 것이다.

 

   <TextView
        android:id="@+id/test1"
        android:text="잘가 세상아!" />  //잘가 세상아!로 바꿔줬다.

 

이런식으로 말이다.

 

하지만 나는 이런 방법으로 텍스트를 수정하고 싶지 않았다.

정확히는 xml 파일에서 텍스트를 수정하고 싶지 않고,

java 파일에서 텍스트를 수정하고 싶었다.

 

이때 사용되는 게 setText다.

 


2. MainActivity.java

package com.chobo.settext;

import androidx.appcompat.app.AppCompatActivity;

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

public
class MainActivity extends AppCompatActivity {

    TextView test1; //test1이란 변수 생성


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

    test1 = findViewById(R.id.test1); // activity.xml 파일에 있는 test1과 현재 java파일의 test1을 연결


    }
}

 

setText를 사용하기에 앞서

java 파일에서 해줘야 할 게 있다.

 

xml에서 만든 아이디와

java의 변수를 findView를 통해 연결하는 걸 잘 아는 분이라면

스크롤을 내려서 아래에 있는 3. setText로 바로 넘어가는 걸 권하고 싶다.

 

하단의 글은 java파일과 xml 파일 사이로 변수 연결하는 것에 대해

잘 모르시는 분들을 대상으로 쓴 글이다.


 

우리가 activity_main.xml 파일에서 TextView의 이름을 test1이라고 이름 붙여줬었다.

activity_main.xml 파일에 있는 test1을 java파일에서도 사용할 수 있게

조치를 해줘야 앱에서 사용할 수 있다. 단 두 줄만 작성해주면 된다.

 

TextView test1

 

MainActivity.java 파일에 test1이란 이름을 가진 변수를 생성한다.

앞에 TextView를 붙인 이유는 우리가 변수를 선언할 때

변수의 모양이 어떤 모양인지 알려줘야 하기 때문이다.

 

c언어를 배웠다면 ina test 1;과 같은 느낌이라고 생각하면 될 것이고

언어를 아직 배우지 않았다면

 

기업이 음식을 팔 때 그 음식에 어떤 식품첨가물이 들어있는지 뒷면에 표기해서 알려줘야 하는 것처럼

변수도 마찬가지로 이 변수를 선언하기 전에

변수의 모양이 세모인지, 네모인지, 다이아몬드인지 사전에 알려주는 게

암묵적인 약속이라 해당 변수의 모양을 알려주는 거라고 이해하면 된다.

 

test1이란 변수는 TextView라는 모양(식품첨가물이 들어간)의 변수다.

변수는 어떤 걸 담을 수 있는 그릇에 비유할 수 있는

현재 test1이란 그릇 안에는 아무것도 든 게 없는 껍대기 상태다. 

 

test1 = findViewById(R.id.test1);

 

위의 코드를 통해 껍데기(test1)안에

activity.xml에 있는 test1을 담아주려고 한다.

 

길을 찾을 때 지도를 찾아서 원하는 걸 찾듯이

findViewById는 지도와 같은 역할을 한다.

findViewByid란 지도를 켜서 Resource(res) 파일로 들어가서

id 명이 test1를 꺼내와서 test1이란 껍데기에 넣어라는 게 위의 코드다.

 

즉 res > layout > activity_main.xml 파일에 있는

아이디 명 test1인 아이를 꺼내와서

test1 이란 변수에 저장하란 뜻이기도 하다.

 

이렇게 되면 activity_main에 있던 test1이란 이름을 가진 TextView(텍스트 박스)가

MainActivity.java에서 생성된 변수 test1에 담겨진다.

 

서로 다른 파일에 있던 test1들이

이제는 test1 = test1 서로 같아진 것이다.

 

이제 모든 준비가 끝났다.


3. SetText

 

맨 처음 글을 시작할 때

setText란 xml파일이 아닌 java파일에서

텍스트을 변경할 수 있게 해주는 것이라고 했다.

 

MainActivity.java 파일에서 setText를 이용하면

글씨를 바꿀 수 있단 뜻이다.

 

변수명.setText("바꾸고 싶은 텍스트 입력");

 

이런 형식으로 setText는 쓰인다.

 

여기서 변수명엔 변수의 이름인

test1을 넣어주고, 큰 따옴표("")안에는 아무 텍스트를 입력해 주면 된다.

 

    test1.setText("반갑다 친구야!");  //내가 입력한 것

 

나는 위와 같이 입력해줬다.

 

코드 전체를 보면 아래와 같다.

 

package com.chobo.settext;

import androidx.appcompat.app.AppCompatActivity;

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

public
class MainActivity extends AppCompatActivity {

    TextView test1;


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

    test1 = findViewById(R.id.test1);

    test1.setText("반갑다 친구야!");  //내가 입력한 것

    }
}

 

이제 실행 결과를 확인해 보자.

 

 

 

test1.setText("반갑다 친구야!); 를 입력해 주고 실행을 하면

내가 xml 파일에서 텍스트를 수정하지 않았음에도

"반갑다 친구야"로 텍스트가 변경된 걸 볼 수 있다.

 

 

<결론>

 

setText는 xml 파일이 아닌

java 파일에서 텍스트를 변경하고 싶을 때 사용하는 것이다.

반응형