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

Posted at 2013.11.19 19:32 | Posted in == Mobile ==/Android



facebook에 글올리기



안드로이드(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


이웃추가
facebook에 글올리기
  1. 개발개발
    글 잘 보고 있습니다.
    그대로 따라하고 있는데 sample에 있는 텍스트를 gettext로 불러오고 텍스트뷰의 ID를 찾은다음 settext로 텍스트를 넣으면 오류가 뜹니다 다른대서는 오류가 안나는데 settext만 쓰면 바로 오류가 나네요
    그리고 이 구문이 있는데 이게 있으면 settext를 안해도 입력이 되는데 이건 뭔가요?ㅜ
    if (savedInstanceState == null) {
    getFragmentManager().beginTransaction()
    .add(R.id.container, new PlaceholderFragment()).commit();
    }
  2. 비밀댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기