본문 바로가기
개발/Adroid

[android] 문자열 리소스 <string>

by KEI NETWORK 2019. 10. 16.
728x90

안드로이드(Android) 문자열 리소스 <string>

 

 

안드로이드(Android) res(리소스) 관리

 

 

안드로이드에서는 여러 리소스들을 /res/ 밑에서 관리한다.

문자열 리소스는 기본적으로 /res/values 밑에 strings.xml에서 관리된다.

 

필요한 문자열을 strings.xml에 등록하고, layout과 Activity에서 리소스를 사용해보자.

 

 

1. res(리소스)에 String 문자열 등록하기

 

 

strings.xml

 

 

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="app_name">HelloAndroid</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    
    <string name="sample1">Hello~! Friends~!</string>
    <string name="sample2"><i>Hello~!</i><b>Android~!</b></string>
    <string name="sample3">Name : %1$s, Score : %2$d</string>

</resources>

 

 

sample1 : Hello~! Friends~! 라는 String을 리소스로 등록했다.

sample2 : Hello~! 는 기울기를 넣고, Android~!를 볼드 처리한 String을 리소스로 등록했다.

sample3 : 첫번째 인자(%1)은 문자형($s), 두번째 인자(%2)는 숫자형($d)로 매핑할 수 있는 String을 리소스로 등록했다.

 

(app_name, action_settings, hello_world는 최초 프로젝트 생성시 등록되어 있다.)

 

 

 

 

 

 

2. layout의 xml에서 String 리소스 불러오기

 

안드로이드의 화면은 /res/layout 밑에 xml 파일로 정의되어 있다.

 

프로젝트 생성시 최초 화면은 activity_main.xml 로 지정되어 있다.

 

activity_main.xml에 등록한 String 리소스를 불러와 화면에 출력해보자.

 

 

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sample1" />


    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="15dp"
        android:text="@string/sample2" />


    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="15dp"
        android:text="@string/sample3" />


</RelativeLayout>

 

 

 

 

- <TextView> 가 3개 등록되어있다. 

 

- 첫 번째 <TextView>는 id가 textView1 이며, (android:id="@+id/textView1") string 리소스중 name이 sample1의 문자열을 가져온다.(android:text="@string/sample1")

-> textView1 : Hello~! Friends~!

 

- 두번째, 세번째 <TextView> 도 마찬가지로 id는 textView2, textView3 이며, stirng 리소스중 name이 sample2, sampl3의 문자열을 가져온다.

-> textView2 :  <i>Hello~!</i><b>Android~!</b>, textView3 :Name : %1$s, Score : %2$d

 

 

프로젝트를 실행시켜보자.

 

 

 

-strings.xml 에 등록된 문자열 리소스들을 출력한다. <i></i> 와 <b></b> 등 HTML의 문법이 적용되지만,

%1$s, %2$d 는 Activity에서 Formatting으로 매핑을 해줘야 한다.

 

 

 

 

 

 

3. Activity.java에서 리소스 불러오기

 

MainActivity.java에서 리소스에 등록된 string 문자열을 불러와서 사용해보자.

 

 

public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // string 리소스중 name이 sample1의 문자열을 getString()으로 가져온다.
        String sample1 = getString(R.string.sample1);   
        
        // 리소스에서 id가 textView1인 TextView를 가져온다.
        // sample1 을 textView1 에 적용한다.
        TextView textView1 = (TextView)findViewById(R.id.textView1);    
        textView1.setText(sample1);      
        
        // string 리소스중 name이 sample2의 문자열을 getText()로 가져온다.
        CharSequence sample2 = getText(R.string.sample2);      
        
        // 리소스에서 id가 textView2인 TextView를 가져온다.
        // sample2을 textView2 에 적용한다.
        TextView textView2 = (TextView)findViewById(R.id.textView2);
        textView2.setText(sample2);
        
        
        // string 리소스중 name이 sample3의 문자열을 getString()으로 가져온다.
        // name 이라는 String에 html형식으로 인코딩한 "Hyeon" 문자열을 저장한다.
        // String.format 을 사용하여 sample3 에 name과 90을 인자로 대입한 결과를 resultText에 대입한다.
        String sample3 = getString(R.string.sample3);
        String name = TextUtils.htmlEncode("Hyeon");
        String resultText = String.format(sample3, name, 90);
        
        // 리소스에서 id가 textView3인 TextView를 가져온다.
        // resultText를 textView3 에 적용한다.
        TextView textView3 = (TextView)findViewById(R.id.textView3);
        textView3.setText(resultText);
        
    }
}

 

 

 

- String 문자열은 getString() 으로 리소스에 등록된 string 문자열을 가져온다.

- sample1 문자열을 가져와서 TextView1 에 셋팅했다.

 

- getText()의 경우 리소스에 등록된 문자열의 태그 속성까지 가져온다. 그리고 반환값은 String이 아닌 CharSequence 이다.

- getText()를 사용하여 sample2의 <i></i> <b></b> 속성까지 가져와서 TextView2에 셋팅했다.

 

- getString()으로 가져온 sample3  에 String.format() 을 사용하여 인자값을 매핑해준다. (%1$s, %2$d)

- formatting한 결과를 resultText에 대입한 후 TextView3에 셋팅한다.

- 레이아웃에서 그대로 불러온 것과 달리 (%1$s, %2$d) 에 데이터가 매핑되어 출력된다.

 

 

프로그램을 실행해보자.

 

 

- getText()로 불러온 sample2가 HTML 태그까지 적용되어 실행된다.

 

- sample3에 데이터가 매핑되어 출력된다.

 

 

 HelloAndroid_strings.zip

 

안드로이드(Android) res(리소스) 관리

 

안드로이드(Android) 문자열 리소스

 

안드로이드(Android) 배열 리소스

 

안드로이드(Android) 색상 리소스

 

안드로이드(Android) 크기 리소스

 

안드로이드(Android) 이미지 리소스 drawable

 

안드로이드(Android) xml 리소스

 

안드로이드(Android) 원본 리소스 raw



출처: https://hyeonstorage.tistory.com/153 [개발이 하고 싶어요]

728x90

댓글