2013년 3월 19일 화요일

android - custom view tip

View 나 ViewGroup 또는 그의 Subclass에서 상속받아 자신만의 View를 구현하고자 한다면 다음과 같은 생성자를 구현해야 한다.

생성자(Context context);

생성자(Context context, AttributeSet attrs);

생성자(Context context, AttributeSet attrs, int defStyle);


커스텀 뷰를 layout xml에서 사용할 경우 두번째나 세번째 생성자가 호출된다.
layout xml의 element에 설정한 attribute(속성)은 AttributeSet로 전달된다.
이때 커스텀 뷰에 자신만의 속성을 사용하고자 한다면 다음과 같은 절차를 따른다.

테스트 예
  • packageName : com.test.app
  • custom view class name : MyCustomView

1. values/attrs.xml에 속성을 설정한다.

<resources>
    <declare-styleable name="my_custom_view" >
        <attr name="animation_duration" format="integer" />
        <attr name="position">
            <enum name="top" value="0" />
            <enum name="bottom" value="1" />
            <enum name="left" value="2" />
            <enum name="right" value="3" />
        </attr>
    </declare-styleable>
...
</resources>

2. layout xml에 xmlns를 선언하고 해당 속성을 적용한다.

<LinearLayout
xmlns:my_custom_view="http://schemas.android.com/apk/res/com.test.app"
android:layout_width="match_parent"
android:layout_height="match_parent"
                android:gravity="center"
>
    <com.test.app.MyCustomView
        android:layout_width="300dip"
        android:layout_height="200dip"
        my_custom_view:animation_duration="1000"
        my_custom_view:position="top"
        />

</LinearLayout>

3. 구현 클래스에서 해당 속성값을 가져와 적용한다.

public MyCustomView(Context context, AttributeSet attrs) {
    // 커스텀 속성 처리
    String namespace = "http://schemas.android.com/apk/res/com.test.app"
    int defaultAnimDur = 500;
    int animationDuration = attrs.getAttributeIntValue(namespace, "animation_duration", defaultAnimDur);
    String positionStr = attrs.getAttributeValue(namespace, "position");
    
    // android 기본 속성 처리
    namespace = "http://schemas.android.com/apk/res/android"
    int layoutWidth = attrs.getAttributeIntValue(namespace, "layout_width", 0);
    int layoutHeight = attrs.getAttributeIntValue(namespace, "layout_height", 0);
}




2013년 3월 5일 화요일

tizen - namespace 요약


Tizen::App
어플 동작 정의, 시스템 옵션 지정, 설정 등의 어플리케이션 개발을 위한 기본적인 클래스와 인터페이스를 제공한다.
  • 어플의 동작이나 생명주기를 관리하는 방법을 제공하며, UI 어플이나 서비스를 제어할 수 있다.(Tizen::App::App)
  • 시스템 이벤트를 제어할 수 있다.(Tizen::App::App, Tizen::System::IScreenEventListener)
  • 어플의 데이터를 저장하고 복원하는 기능을 제공한다. (Tizen::App::AppRegistry)
  • 다국어를 지원한다. (Tizen::App::AppResource)
  • 다른 어플을 실행하거나 어플 상태를 등록할 수 있다. (Tizen::App::AppManager)
  • 어플리케이션을 제어할 수 있다. (Tizen::App::AppControl)
  • 데이터를 제어할 수 있다.( Tizen::App::SqlDataControl, Tizen::App::MapDataControl)
  • 패키지를 설치, 관리할 수 있다.( Tizen::App::Package)


Tizen::Base
신뢰성과 효율성 향상을 위해 다른 패키지에서 사용할 수 있는 기본적인 기능들을 제공한다.
  • 기본 데이터 타입을 감싼 래퍼 클래스를 제공한다. (Tizen::Base::Integer, Tizen::Base::ByteBuffer 등)
  • 컬렉션을 제공한다. (Tizen::Base::Collection)
  • 시스템정보 조회, 쓰레드 제어, 공유 리스소에 접근등 런타임 환경을 제공한다. (Tizen::Base::Runtime)
  • 유틸 클래스를 제공한다. (Tizen::Base::Utility)


Tizen::Content
이미지, 오디오, 비디오 등 다양한 데이터 타입들에 대한 관리 기능을 제공한다.
  • 디바이스 내 컨텐츠 관리(Tizen::Content::ContentManager)
  • 디바이스 컨텐츠 검색(Tizen::Content::ContentSearch)
  • HTTP 다운로드 지원(Tizen::Content::DownloadManager)
  • 재생 목록 관리(Tizen::Content::PlayListManager)


Tizen::Graphics
그래픽과 텍스트 랜더링 기능 제공한다.
EGL, OpenGL ES1.1, OpenGL ES2.0 지원


Tizen::Io
입출력에 필요한 기본적인 기능을 제공한다.
  • 파일 입출력 기능 제공 (Tizen::Io::File, Tizen::Io::FileAttributes)
  • 디렉토리 관리 기능 제공 (Tizen::Io::Directory,  Tizen::Io::DirEnumerator, Tizen::Io::DirEntry)
  • 레지스트리 파일 관리 기능 제공 (Tizen::Io::Registry)
  • 데이터베이스 관리 기능 제공 (Tizen::Io::Database)
  • 직렬포트 통신 지원(Tizen::Io::SerialPort, Tizen::Io::ISerialPortEventListener)
  • 보안된(안전한) 입출력 지원 - 파일, 디렉토리, 레지스트리, 데이터베이스에 대해 암호화 기능을 제공
  • Message Port - 로컬 포트로 메시지를 수신하고 원격 포트로 메시지를 전송하며 어플간 통신기능을 제공한다.


Tizen::Locales
다국어 및 지역화를 위한 기능 제공한다.


Tizen::Locations
위치기반 정보 및 서비스를 위한 기능 제공한다.


Tizen::Media
이미지, 오디오, 비디오 등 미디어에 대한 제어 기능 제공한다.


Tizen::Messaging
SMS, MMS, Email, Push 등 메시지 처리 기능 제공한다.


Tizen::Net
네트워크 연결관리, 모니터링, DNS 커리, DHCP 정보 수신 등을 제공하며 다음과 같은 다양한 데이터 통신 기술을 지원한다.
Bluetooth, HTTP, TCP, UDP, Wi-Fi, Wi-Fi Direct, NFC


Tizen::Security
승인, 암/복호화 등을 위한 보안 기능 제공한다.


Tizen::Shell
Notification, Quick Panel Frame 등 디바이스의 쉘 기능 제공한다.


Tizen::Social
디바이스의 주소록, 일정 데이터 엑세스 기능을 제공한다.


Tizen::System
시스템 정보 조회 및 알람 기능을 제공한다.
  • 알람기능 제공 (Tizen::System::Alarm)
  • 외부 디바이스 관리 (Tizen::System::DeviceManager) - 블루투스 헤드셋, 충전기, 유선 헤드셋, TV 출력, 저장장치, 키보드 등 관리
  • 환경변수 세팅값 조회 (Tizen::System::Environment)
  • 전원관리 (Tizen::System::PowerManager) - 전원관리정책 제어, 스크린 ON/OFF 설정, 배터리 상태 조회
  • 런타임 정보 조회 (Tizen::System::RuntimeInfo) - 메모리, 스토리지 사용 정보 등 조회
  • 세팅 정보 조회 (Tizen::System::SettingInfo) - 네트워크 상태, 지역 설정, 위치정보 설정, 스크린 설정, 사운드 설정 등 조회
  • 시스템 정보 조회 (Tizen::System::SystemInfo) - 디바이스 ID, 플랫폼, API 버전, CPU, FPU 정보 등 조회
  • 시스템 시간 (Tizen::System::SystemTime)
  • Vibrator 관리 기능 (Tizen::System::Vibrator) - 기본 기능


Tizen::Telephony
모바일 네트워크 및 SIM 카드 정보 제공한다.
  • 통화 정보 (Tizen::Telephony::CallInfo)
  • 모바일 네트워크 정보 (Tizen::Telephony::NetworkManager, Tizen::Telephony::NetworkInfo)
  • 통화 상태 변경정보 (Tizen::Telephony::ITelephonyCallEventListener)
  • 모바일 네트워크 상태 변경정보 (Tizen::Telephony::ITelephonyNetworkEventListener)
  • SIM 카드 정보 (Tizen::Telephony::SimInfo)


Tizen::Text
문자열 인코딩/디코딩 기능 제공한다.


Tizen::Ui
UI를 위한 이벤트 관련 클래스와 인터페이스들을 제공한다.
  • Scenes 관리 (Tizen::Ui::Scenes) - Form과 Panel들의 이동을 쉽게하고 Scenes의 이동과 전환 애니메이션을 제공
  • UI 컨트롤 관리 (Tizen::Ui::Controls)
  • 데이터 바인딩 (Tizen::Ui::DataBindingContext)
  • 이벤트 제어 (Tizen::Ui::ITouchEventListener)
  • 레이아웃 설정 (Tizen::Ui::Layout)
  • 애니메이션 생성 (Tizen::Ui::Animations)
  • 효과 생성 (Tizen::Ui::Effects)
  • 클립보드 (Tizen::Ui::Clipboard)
  • Input Connection 사용 (Tizen::Ui::InputConnection)


Tizen::Uix
기본 UI에서 제공하지 않는 사용자 경험과 상호작용을 향상 시킬 화장된 기능을 제공한다.
  • 얼굴 감지 및 인식 (Tizen::Uix::Vision::FaceDetector, Tizen::Uix::Vision::FaceRecognizer)
  • 음성인식 및 합성 (Tizen::Uix::Speech::SpeechToText, Tizen::Uix::Speech::TextToSpeech)
  • 디바이스 내부 센서 (Tizen::Uix::Sensor::SensorManager)
  • 동작 인식 (Tizen::Uix::Sensor::Motion)


Tizen::Web
WebKit 엔진 기반의 돌핀 브라우저를 제공한다.
  • 브라우저 기능 내장 (Tizen::Web::Controls)
  • JSON 기능 제공 (Tizen::Web::Json)


2013년 3월 4일 월요일

tizen - Multiple Screen Support Guide

1. 개념

- UI scalability : 어플리케이션의 좌표계를 논리적으로 설정하면 논리적 해상도와 디바이스의 물리적 해상도와 차이만큼 스케일 업/다운이 발생
- Physical Resolution : 디바이스의 실제 픽셀수로 어플리케이션 좌표계를 물리적으로 설정할 경우 다른 해상도의 단말 지원은 어플리케이션에서 따로 처리 해야함.
- Logical Resolution : 가상의 논리적인 픽셀로 어플리케이션 좌표계를 논리적으로 설정하면 UI scalability가 발생(가로/세로 비율이 유지되며 스케일링이 되기에 가로/세로 비유일 다른 단말에서는 가로(좁은쪽)를 기준으로 맞춤
- Logical Coordinate : API 2.0 버전부터 480, 960과 같은 논리 좌표계가 추가되었음
- Screen Density : 인치당 가로/세로로 나누는 값으로 Screen Density Extra High와 Screen Density High를 지원함


2. 지원되는 화면 크기

  • Screen Size Large
  • Screen Size Normal

480x800, 720x1280은 Normal에 해당한다.


3. UI Scalability

타이젠은 논리 좌표계를 사용할 경우 물리적 픽셀에 맞추어 자동으로 스케일이 이루어 진다.

스케일링을 지원하는 UI 와 그래픽 클래스

  • Tizen::Web::Controls::Web
  • Tizen::Ui::Controls
  • Tizen::Graphics
  • Tizen::Graphics::Font
폰트는 UI 처럼 같은 비율의 스케일링 처리를 하면 안된다.
시인성을 높이기 위해 폰트 스케일링은 다르게 처리 될 수 있다.


4. 리소스 관리 및 사전 스케일링
res 폴더에 물리적 픽셀별 디렉토리와 논리적 density 디렉토리에 리소스를 넣을 수 있다.
리소스는 디바이스의 물리적 픽셀에 대응되는 디렉토리를 먼저 찾으며 이후 논리 좌표계를 사용할 경우 논리적 density 리소스를 찾는다.


5. 다양한 화면을 지원하기 위한 고려사항
논리 좌표계를 사용하면 가로는 디바이스의 물리적 해상도에 맞게 자동으로 스케일링이 이루어지며 세로는 단말에 따라 다르게 처리될 수 있다.

세로에 대해서는 스크롤을 사용한다거나 UI 컨트롤을 상대적으로 배치한다거나 Layout 컨트롤을 사용하면 된다.