2011-08-30 3 views
3

ViewPager을 사용하는 잡지 응용 프로그램을 만들고 WebView을 스크롤합니다. 대부분의 페이지는 세로이지만 일부는 가로로 볼 수 있습니다.android : configChanges를 동적으로 변경하십시오.

이 문제를 처리하기 위해, 나는 ViewPager 보유 Activity에 두 가지 방법을 사용하고 있습니다 : 우리가 필요로하는 모든 페이지가 세로 숙박 초상화를 할 수 있는지 확인이와

public void allowOrientationChanges() { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
} 

public void enforcePortrait() { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

을 (getActivity().enforcePortrait()를 호출)와 세로/가로보기가있는 항목은 전체 재시작 과정 (getActivity().allowOrientationChanges())으로 이동합니다.

우리는 잡지의 일부 페이지에 비디오를 추가하려고했습니다. 죄송하지만 HTML5 동영상 태그가 제대로 작동하지 않아 VideoView을 Google 레이아웃에 추가했습니다. 지금 추가 할 기능은 다음과 같습니다.

  • (세로) : 특정 장소에 비디오를 표시합니다. (완료!)
  • (가로) : 동영상을 전체 화면으로 만듭니다 (예 : YouTube 앱).

나는이 작업을 수행하기 위해 노력하고 내가 찾은 유일한 방법은 Activity에 방법에 VideoView의 크기를 변경하고 구성을 변경 한 fragment 통지. 이 문제는 Activityandroid:configChanges="orientation|keyboardHidden"을 추가하면보기를 다시 만들 수 없게됩니다. 코드에서 android:configChanges을 변경하고 페이지에 따라

  1. 하지만 호출이있는 경우 나 찾을 수 없습니다 :

    두 가지 가능한 솔루션을 나는 생각했다.

  2. 메서드에서 다시 생성하도록 강요합니다. fragment의 레크리에이션을 강제하는 방법을 모르겠습니다.

아이디어가 있으십니까?

답변

0

방금 ​​고쳤습니다. 귀하의 답변에 감사드립니다.

내 해결책은 Activityandroid:configChanges="orientation|keyboardHidden" 플래그가 있도록하는 것이 었습니다.

나는 WebView 또는 내가 필요에 따라 VideoView 크기를 조정 어디가 Fragment 내부의 메소드를 오버라이드 (override)하는 것을 수행 한 후.

편집 :

난 그냥 이것에 대해 blog post했다.

2

비슷한 이름의 매니페스트에서 활동을 두 번 정의하고 두 번째 화신을 enabled = false로 설정하면 문제가 발생할 수 있습니다. 그런 다음 PackageManager.setComponentEnabledSetting(....)을 호출하여 동적으로 2 가지 활동을 전환하십시오. 단지 생각이지만 작동하는지 확실하지는 않습니다.

+0

'setComponentEnabledSetting()'메소드에 대해 조금 읽었습니다. 문제는 패키지 이름과 클래스 이름으로 생성 된'ComponentName'이 필요하다는 것입니다. 따라서 액티비티의 이름은 같을 수 없습니다. 만약 이것이 해결책이된다면 두 개의 서로 다른 'activities'를 정의하고 괜찮은 소리를 내지 않는 페이지 스크롤을 시작할 때와 똑같을 것입니다 : ( – Macarse

2

저는 ViewPager를 사용하고 다른 WebView를 스크롤하는 잡지 응용 프로그램을 만들고 있습니다.

신뢰할 만합니까?

대부분의 페이지는 세로이지만 일부는 가로로 볼 수 있습니다.

모든 페이지를 가로로 볼 수있게하십시오. 사용자가 가로로 앱을 보려고하는 경우 (예 : 앱을 사용하기 위해 TV를 옆으로 돌리는 느낌이 들지 않는 경우) - 알려 주시기 바랍니다.

아이디어가 있으십니까? 활동 onResume()에서

는 그것이 그 당시 Configuration ( getResources().getConfiguration())에 기초하여 그 크기 VideoView/위치를 해결하기 위해 잡지 페이지 단편 통지있다.

+0

) 신뢰할 수 있다는 것은 무엇을 의미합니까? b) 대부분의 페이지는 풀 스크린 이미지이며 불행히도 가로 모드로 표시 할 수있는 리소스가 없습니다. c)'onResume()'메소드에서 그 로직을 추가하려고 생각했지만 비디오가 재생성되었다는 것을 의미합니다. 자원 낭비뿐만 아니라'seekTo()'에 모든 논리를 추가해야합니다. – Macarse

+0

@Macarse : '신뢰할 수 있다는 것은 무엇을 의미합니까?'- 'ViewPager'와 'WebView'가 터치 이벤트를 놓고 싸울 것으로 기대합니다. "이것은 비디오가 다시 만들어 졌음을 의미합니다."- 그렇지만 당신이 원하는 것을 얻을 수 없다는 재미있는 느낌을 가지십시오. 귀하의 두 가지 구체적인 아이디어 (질문의 맨 아래에 있음)가 가능할 지 모르겠습니다. – CommonsWare

관련 문제