75621 김상은멀티미디어 응용 CHAPTER 12 리소스 관리 12-1 대체 리소스 12-2 다국어 지원 12-3 그 외 리소스
75621 김상은
멀티미디어 응용 CHAPTER 12 리소스 관리 12-1 대체 리소스 12-2 다국어 지원 12-3 그 외 리소스
12-1 대체 리소스
환경의 종류 가능한 접미어 언어 ISO 639-1이 정의하는 두 자리 소문자 국가 코드. en, ko, fr, ja, ru등 지역 소문자 r다음에 대문자 두자리로 된 지역 코드, rUS, rCA, rFR 등 화면크기 small, normal, large, xlarge 화면 종횡비 long, notlong 화면 방향 port, land, sqaure 화면 밀도 ldpi, mdpi, hdpi, xhdpi, nodpi 해상도 92dpi, 108dpi 터치 스크린 notouch, stylus, finger 키보드 유무 small, normal, large, xlarge 입력 장치 long, notlong 네비 방법 port, land, sqaure 화면 크기 ldpi, mdpi, hdpi, xhdpi, nodpi
Port 세로, land 가로, square는 사각형 개발자가 환경별로 사용할 리소스를 따로 작성해 놓으면 시스템은 실행 시에 가장 적합한 리소스를 골라 로드 한다. ‹#›
12-1 대체 리소스
접미어 규칙 여러 개의 접미어를 붙일 때는(-)로 구분하여 붙이며 반드시 도표의 순서에 맞게 작성해야 한다. 즉, 언어에 대한 접미어가 가장 먼저 와야 한다. 언어별로 폴더를 구성하고 다시 밀도 별로 서브 폴더를 구성할 수는 없다. 접미는 대소문자를 구분한다. 한국어 레이아웃은 layout-ko여야 하며 layout-KO라고 적어서는 안된다. 한 환경에 대해서는 하나의 접미만 가능하다. layout-ko-en 따위는 언어에 대한 지정이 두 개나 되므로 애매하다. 코드나 리소스에서 참조할 때는 접미를 붙이지 않는다.
‹#›
12-1 대체 리소스
layout 리소스 폴더 생성 방법은 2가지가 있다. layout 폴더를 직접 생성 하는 방법 res폴더에 layout – 접미어를 통해 생성이 가능하다. (접미어 규칙은 3p참고) Ex)layout-ko-land 한국어이고 핸드폰이 가로 보기 상태일 때 리소스 선택 Xml은 사용자가 직접 작성. Wizard를 사용 하는 방법
12-1 대체 리소스
폴더를 직접 생성하는 방법 주의) xml파일 이름은 같아야 함
예제1)실행화면
세로 가로
12-1 대체 소스예제1)
res/layout/c12_landport.xml
12-1 대체 소스예제1)
res/layout-land/c12_landport.xml
12.1 대체 리소스예제2)
Wizard를 사용하는 방법 Wizard를 사용해서 언어가 한글이고 가로 모드 일 때 동작하는 레이아웃을 작성할 것입니다. 언어가 영어
Default layout xml이름과 같게
예제2)실행화면
세로 가로 영문 가로일 때, 세로 일 때 Test 필요 =>환경설정 => 언어(languages) 탭에서 변경가능
12-1 대체 소스예제2)
res/layout/main.xml
12-1 대체 소스예제2)
Example1)
기본 layout 한국어 가로 영어 기본 layout 영어 가로 layout 버튼 클릭시 - Welcome to Android App출력 기본 레이아웃, 한국어 가로 레이아웃 외에 [영어 기본 레이아웃], [영어 가로 레이아웃] 추가 생성
12-2 다국어 지원
대체 리소스를 가장 유용하게 잘 활용하는 대표적인 예 앱은 전세계를 대상으로 팔리는 것이기 때문에 다국어 지원이 필수. 문자열 리소스만 언어별로 작성해 놓고 다른 리소스에서는 문자열 리소스를 참조 하는 형태로 구현.
12-2 다국어 지원(실행화면)영어) 한국어)예제1)
12-2 다국어 지원예제1)
public class C12_multilangActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void mOnClick(View v){ switch(v.getId()){ case R.id.btnpress: Toast.makeText(this, R.string.multi_toasttext, 0).show(); break; case R.id.btnsmile: String text = getResources().getString(R.string.multi_smiletext); new AlertDialog.Builder(this) .setMessage(text) .setTitle("Alert") .show(); break; } } }
Comments