안녕하세요. 제임스 입니다.
앞번에 안드로이드 리소스에 관해 개념적인 부분을 설명 했는데요.
내용 참 길고 어렵게 느껴 지시죠?
이번에는 샘플 코드와 함께 한번 이전 내용을 요약해보겠습니다.
이글을 읽고 나면 리소스를 어떻게 사용하는지에 대해 이해를 하실수 있으리라 믿습니다.
■ 리소스 파일 작업
※ values 디렉토리
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="reousrce_tut_color">#FF4081</color>
</resources>
<resources></resources> 태그 안에 <color></color> 로 묶어 원하는 컬러 값을 정의해주면 됩니다.
컬러값은 인터넷등에서 색상표를 참조하여 원하는 색으로 설정 하시면 됩니다.
dimens.xml
<resources>
<dimen name="one_pixel">1px</dimen>
<dimen name="double_density">2dp</dimen>
<dimen name="eleven_sp">11sp</dimen>
<dimen name="fab_margin">10dp</dimen>
<dimen name="thirty_density">30dp</dimen>
</resources>
colors 와 동일하게 <resources></resources> 태그 안에 정의를 하지만 <dimen></dimen> 이라는 태그를 이용하여 사이즈를 설정 한다고 생각하시면 됩니다. 단위는 px (Pixel), dp 또는 dip (Density-independent Pixels), sp (Scale-independent Pixels) 등을 사용하고 있습니다. 단위에 대한 내용은 별도로 정리 한번 하도록 하겠습니다.
strings.xml
<resources>
<string name="app_name">Android Resources Tutorial</string>
<string name="resource_string_from_xml">리소스 string 값 XML 파일에서 설정</string>
<string name="resource_string_from_code">리소스 string 값 Java Code 에서 설정</string>
</resources>
문자열을 정의하는 리소스로 <string></string> 태그 안에 정의 하여 사용합니다.
※ drawable 디렉토리
앱 내에서 사용할 이미지를 drawable 디렉토리 아래에 저장하면 됩니다.
※ layout 디렉토리
위 values 디렉토리 내 xml 리소스에서 정의하고 있는 값들을 실제 화면 레이아웃에서 아래와 같이 사용 합니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context="com.tutorial.james.androidresourcestut.MainActivity"
android:orientation="vertical"
android:layout_gravity="center">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/android_drawable"
android:layout_marginTop="@dimen/thirty_density"
android:layout_marginBottom="@dimen/eleven_sp"
android:layout_gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/thirty_density"
android:layout_marginRight="@dimen/thirty_density"
android:textColor="@color/reousrce_tut_color"
android:text="@string/resource_string_from_xml" />
<Button
android:id="@+id/btn_set_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/thirty_density"
android:text="Java Code 로 텍스트 셋팅하기기"/>
<TextView
android:id="@+id/textView_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
/>
</LinearLayout>
</LinearLayout>
사용자 인터페이스를 구성하는 화면 레이아웃 파일입니다.
<ImageView> 를 이용하여 drawable 디렉토리에 있는 이미지를 불러 옵니다.
android:background="@drawable/android_drawable"
바로 아래에 <TextView> 를 이용하여 문자열을 보여 줍니다.
여기서 좌우로 마진 30dp 로 설정하는데 이것을 dimen.xml 에 정의한 thirty_density 라는 값으로 정의 했습니다.
android:layout_marginLeft="@dimen/thirty_density"
android:layout_marginRight="@dimen/thirty_density"
또한 문자열 색상을 colors.xml 에 정의한 resource_tut_color 라는 값으로 정의 했으며,
문자열은 strings.xml 에 정의한 resource_string_from_xml 이라는 값으로 정의 했습니다.
android:textColor="@color/reousrce_tut_color"
android:text="@string/resource_string_from_xml"
그 아래 <Button> 을 위치 시켜 자바코드에서 문자열을 표기 할때 리소스를 사용하는 방법을 보여 드릴겁니다
버튼에도 문자열이 표기 할 수 있는데요 여기서는 strings.xml 에 정의 한 값이 아니라 직접 하드코딩으로 텍스트를 입력 했습니다.
android:text="Java Code 로 텍스트 셋팅하기기"
위와 같이 사용 할 수는 있지만 지양하시길 권합니다. 유지 보수 측면에서 본다면 앱내 모든 문자열들을 stirngs.xml 파일 내에 저장하여 사용하는 것이 좋습니다. 또한 다중 언어를 지원하는 경우라면 거의 필수라고 생각 하시면 됩니다.
다중 언어 지원에 대한 내용은 추후 별도로 다루도록 하겠습니다.
그리고 마지막으로 <TextView> 를 하나 더 만들고 id 값을 부여하여 java code 에서 해당 id 값을 이용하여 텍스트 입력을 할 수 있도록 하였습니다.
<TextView
android:id="@+id/textView_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
/>
※ Java 소스
자바소스 위치는 위 이미지와 같으며 여기서는 MainActivity.java 소스를 아래와 같이 작성 하였습니다.
package com.tutorial.james.androidresourcestut;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// activity_main 을 액티비티의 레이아웃으로 정의
setContentView(R.layout.activity_main);
// btn_set_text 라는 id 값에 클릭리스너를 추가
findViewById(R.id.btn_set_text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 클릭 되었을 경우 ...
// textView_2 라는 id 값을 가진 TextView 의 텍스트를
// strings.xml 에 있는 resource_string_from_code 값으로 적용
((TextView)findViewById(R.id.textView_2)).setText(R.string.resource_string_from_code);
}
});
}
}
소스내에 주석을 간단히 작성했으니 참조하세요 :)
문자열을 TextView 에 set 할때는 위와 같이 setText(R.string.표시할문자열_ID값) 으로 호출 하면 됩니다.
각 객체의 사용법에 대해서는 별도 내용으로 정리할 예정입니다.
위와 같이 작성 후 앱을 빌드 합니다.
Android Studio 단축키 Alt+Shift+X 를 이용하거나 아래 버튼을 클릭 합니다.
■ 앱 실행 결과
최상단에 drawable 디렉토리에 있던 이미지가 노출되고 그 하단에 strings.xml 에 정의한 문자열 및 colors.xml 에 정의 한 색상이 적용되어 표시 됩니다.
그 하단에 버튼이 노출되고 이 버튼을 클릭 시 아래와 같이 문자열이 나타나게 됩니다.
리소스를 이용하여 간단한 앱을 만들어 봤습니다.
개념만 설명 하던것과 달리 샘플을 보시면 좀더 쉽게 이해가 되실겁니다.
도움이 되셧길 기도하면서 저는 다른 이야기를 준비하겠습니다.