2011-12-17 4 views
0

편집 :조각 : 응용 프로그램의 최종 화면 크기 의존 레이아웃을 작성하려면 어떻게합니까?

문제는 궁극적으로 아래의 질문을 구현하는 방법에 대한 사실상의 표준 또는 Google의 권고가있는 경우에 대해.


원산지 : 나는 최근에 Fragments concept in Android에 면밀한 관찰을하기 시작했다

. 나는 그것의 아이디어를 얻는다. (적어도 내가하는 것처럼 생각한다) 나는 또한 그것의 필요성을 본다. 나는 조각의 구현 뒤에있는 기술적 인 문제를 이해하는 데 어려움이 없습니다. 내가 이해하는 데 문제가있는 것은 내 애플리케이션의 최종 레이아웃을 작성하여 작은 스마트 폰뿐만 아니라 대형 태블릿에서도 자동으로 작동하도록하는 방법입니다.

내 목록 조각 (예 : MS Outlook-inbox-list)이 있는데 내 세부보기 조각 (예 : MS Outlook-email-preview)이 있습니다. 태블릿에서 필자는이 두 단편을 하나의 활동으로 보여주고 싶지만 스마트 폰에서는 두 가지 다른 활동으로 보여주고 싶습니다. 단 하나의 활동에 둘 다 필요하지는 않습니다.

어떻게 해결할 수 있습니까?

내 애플리케이션 (올인원 태블릿 활동과 두 가지 별도 스마트 폰 특정 활동)에서 세 가지 활동을 구현해야합니까? 그렇다면 응용 프로그램은 사용할 구현 (1 또는 1 + 1)을 어떻게 결정할 수 있습니까?

보통 내 액티비티는 (MVC 패러다임에 따라) '컨트롤러'의 역할을하지만, 위의 질문에서 세 개의 컨트롤러가 있습니다. 루트 컨트롤러의 역할을하는 구성은 무엇입니까? UI가없는 '마스터 액티비티'를 써서 프로그래밍 방식으로 어떤 장치를 사용 중인지 결정한 다음 적절한 조각 작업을 적절하게 호출해야합니까? 그렇다면; 어떻게 잘 정의 된 방식으로 - 내 응용 프로그램이 실행중인 장치 유형 (태블릿/핸드셋)을 찾을 수 있습니까?

나는 내 코드 중 일부를 게시 할 수 있다고 생각하지만 구현상의 문제보다 아키텍처 선택에 대한 질문이 많아 질수록 내 문제를 더 명확히 해줄 수 있다고 생각하지 않습니다.


건배,
DBM

답변

0

내 응용 프로그램에서 세 가지 활동을 (모든 -에 - 하나의 태블릿 활동과 두 개의 스마트 폰의 특정 활동)를 구현해야합니까?

아니요, 아마도 2 개입니다. 하나는 ListFragment을로드하고, 공간이 있으면 세부 정보 조각을로드합니다. 다른 하나는 세부 조각 만로드합니다. 사용자가 목록 항목을 두드리고 첫 번째 활동에서 세부 조각이 표시되지 않으면이 활동은 첫 번째 항목에 의해 시작됩니다.

일반적으로 내 활동은 (MVC 패러다임에 따라) '컨트롤러'의 역할을하지만, 위의 질문에서 볼 때 3 개의 컨트롤러가 있습니다.

IMHO, 단편으로, 단편은 사용자의 컨트롤러입니다. 액티비티는 표시되는 조각을 결정하고 교차 조각 이벤트를 처리하는 오케스트레이션 계층입니다.

하지만 그렇다면; 어떻게 잘 정의 된 방식으로 - 내 응용 프로그램이 실행중인 장치 유형 (태블릿/핸드셋)을 찾을 수 있습니까?

대부분의 경우 가장 간단한 솔루션은 레이아웃 XML 리소스로이를 구동하는 것입니다.

예를 들어 위의 권장 사항에서 첫 번째 활동에는 main.xml의 두 가지 버전이있을 수 있습니다. 하나 (res/layout/main.xml)는 ListFragment 만로드합니다. 다른 하나 (예 : res/layout-large-land/main.xml)는 ListFragment 및 세부 조각을로드하거나 동적 세부 조각 (FragmentTransaction을 통해 정의하는 조각)에 대해 ListFragmentFrameLayout 컨테이너를로드합니다. 활동 자체는 두 조각을 관리하는지 또는 두 번째 조각 (또는 그 FrameLayout "슬롯")이 팽창 된 main.xml에 있는지 여부를 판별하여 판별합니다. 이렇게하면 나중에 레이아웃 규칙을 변경하면 (예 : res/layout-sw600dp-land/main.xml) Java 코드를 변경할 필요가 없습니다.

ConfigurationDisplayMetrics을 사용하면 Java 코드에서도 의사 결정을 내릴 수 있습니다.

+0

사실 아주 좋은 답변입니다. 감사! 그리고 제가 올바르게 읽는다면 개별 개발자의 창조성이 조각 상호 작용과 레이아웃을 조율하는 방법에 많은 공간이있는 것 같습니다. 나는 당신을 위해 다른 디스플레이 측정법을 관리하기위한 좋은 오래된 '활동'을 대체하거나 확장 할 수있는 "조각 헬퍼 클래스"에 대한 귀하의 답변이나 다른 포럼에서 어떠한 정보도 찾지 못했습니다. 이 너 자신. 좋은 답변을 주셔서 다시 한 번 감사드립니다! – dbm

관련 문제