2014-05-12 8 views
0

휴대 전화를 세로 방향으로 고정하고 태블릿 버전을 가로 방향과 세로 방향으로 둘 수있는 앱을 작성하려고합니다.Android - 휴대 전화를 세로로 고정하고 태블릿을 가로 및 세로로 놓을 수 있습니다.

나는 모든 다음 질문에 따라 거의 작품 ...

How do I lock screen orientation for phone, but not for tablet? (Android) How to allow both landscape/portrait for tablets only Portrait for phone, landscape for Tablet (Android-Layout) 내가 지금까지했던 어떤 landscape mode in tablet only Locking phone in portrait mode

내 자신에 활동을 확장 무언가를 만들었습니다 기본 작업 및 onCreate와 덮어 쓰기 된 onConfigurationChanged에 오리엔테이션 변경 코드를 포함합니다.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     if(!(new DeviceHelper().isTablet(this))) 
     { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
     super.onCreate(savedInstanceState); 
     setupActionBar(getActivity()); 


    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     //don't reload the current page when the orientation is changed 
     if(!(new DeviceHelper().isTablet(this))) 
     { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
     super.onConfigurationChanged(newConfig); 

    } 

모든 것이 잘 작동합니다 (필자는 onConfigurationChanged를 덮어 씀으로써 활동이 파괴되고 다시 생성되어 몇 초 동안 검은 화면이 나타남).

내 주요 문제는 가로로 휴대 전화를 잡고 있으면 활동이 세로로 유지된다는 것입니다. 완벽한! 그러나 전화가 실제 풍경에 있기 때문에 태블릿의 레이아웃 인 가로 레이아웃이 사용됩니다.

내 이해는 setRequestedOrientation이 호출 될 때 즉시 onConfigurationChanged를 발생시키지 않으면 서 조각이 먼저 호출 된 다음 onConfigurationChanged를 호출하기 전에 배치가 잘못 팽창되어 가로 레이아웃이 이미 설정되었음을 의미합니다.

구성을 기반으로 각 액티비티에서 레이아웃을 설정할 수 있다고 생각하지만 실제로하고 싶지는 않습니다.

그렇다면 앱이 setRequestedOrientation을 기반으로 적절한 res 폴더의 적절한 레이아웃 파일을 사용하게하려면 어떻게해야합니까?

감사

이 잘 작동과
+0

가로 폴더 파일을 어떤 폴더에 넣었습니까? – Parnit

+0

두 파일이 있는데 하나는 일반 레이아웃이고 다른 하나는 레이아웃 랜드입니다. 활동이 세로 방향으로 잠겨 있어도 전화가 가로로 유지되기 때문에 레이아웃 랜드 파일이 사용 중입니다. –

답변

2

가로 레이아웃이 태블릿 전용 인 경우 레이아웃 - sw600dp- 랜드 (7 인치 태블릿 용) 및 레이아웃 -sw720dp- 랜드 (10 인치 태블릿 용)와 같은 태블릿 레이아웃 폴더에 두는 것이 좋습니다. 이렇게하면 태블릿 레이아웃은 태블릿에만 사용됩니다. 휴대 전화의 가로 레이아웃을 선언하지 않으면 일반 세로 레이아웃이 사용됩니다. 태블릿 및 전화 레이아웃을위한 레이아웃 폴더를 분리하면 조직에 도움이됩니다.

+0

감사합니다. 이것은 내가 응답 한 지 약 3 시간 전에 실제로 깨달은 것입니다. 그것은 원래의 문제에 대한 답변이 아니 었습니다. 새로 설정된 오리엔테이션에 따라 리소스 파일을 얻지는 않지만 전화가 들어 있다는 것입니다. 그러나 당신의 대답은 제가 문제를 해결하기 위해 한 것입니다. 너 똑딱이야. –

1

다 (I는 순식간에 대한 흑색 화면을 초래할 파괴되고 다시 활성을 방지하기의 onConfigurationChanged을 덮어).

저는 이것이 문제의 근원이라고 확신합니다. onConfigurationChanged을 무시하지 않고 수행하려는 작업을 수행 할 수 있어야합니다. OS가 구성 변경을 처리하고 올바른 레이아웃 파일을 제공하게하십시오.

이렇게하면 태블릿을 잘 사용할 수 있습니다. 그들은 특정 방향을 설정해서는 안되며 각각의 활동에 대해 올바른 방향으로 열어야합니다. 전화 장치에는 빠른 검정색 화면과 관련된 문제가 있습니다. 일어나고있는 일은 전화가 걸려있는 방향, 즉 풍경에서 활동이 먼저 열리는 것입니다. 그런 다음 코드에서 방향을 Portrait (세로)로 설정하고 구성을 변경하고 활동을 재생성하며 현재보고있는 순간 플래시를 발생시킵니다.

이 문제를 완화 할 수있는 방법이 있습니다.

  • 각 활동에 대한 AndroidManifest.xml에서 사용 android:screenOrientation="behind".그러면 이전 활동 (휴대 전화의 경우 세로, 태블릿의 경우)의 방향으로 활동이 시작됩니다. 그렇다면 항상 올바른 방향으로 시작되기 때문에 Activity가 두 번 생성되는 것에 대해 걱정할 필요가 없습니다.

  • 그러나 이것은 처음 활동을 수정하지는 않습니다. 앱이 시작될 때 해당 플래시가있는 런처 활동을 정확히 한 번 처리하거나 매니페스트에서 런처 활동을 android:screenOrientation="portrait"으로 설정하고 코드에서 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);으로 태블릿을 설정해야합니다. 이로 인해 태블릿을 시작할 때 플래시가 발생할 수 있습니다.

첫 번째 글 머리 기호 만 사용하면 충분하지만 구현을 응용 프로그램의 사용자 경험 요구 사항에 맞게 조정해야합니다.

+0

이 모든 것이 좋겠지 만 setRequestedOrientation을 사용하여 세로 방향을 세로로 설정해도 전화가 가로 방향으로 고정되어있을 때 프리젠 테이션 레이아웃 파일에 대한 우선 순위를 저장하지 않을 것이라고 생각합니다. 필자는 필자가 프리젠 테이션 레이아웃과 값 파일을 표준 가로 폴더 밖으로 옮기고 sw600dp 폴더로 내 모든 문제를 해결할 수있는 태블릿에서만 가로형을 원한다는 사실을 깨달았습니다. –

+0

@RussWheeler 구성 변경을 수동으로 처리하지 않으면 OS가 올바른 리소스를 제공합니다. 장치 방향을 세로로 설정하면 장치를 잡는 방법에 관계없이 세로 레이아웃을 얻게됩니다. 그래서'onConfigurationChange' 코드가 문제의 근원이라고 제안했습니다. – jacobhyphenated

+0

OK tmrw를 사용해 보겠습니다. –