2011-08-30 51 views
3

我正在創建一個雜誌應用程序,它使用ViewPager並滾動到不同的WebView s。 大部分頁面都是肖像畫,但其中一些可以看作是風景畫。動態更改android:configChanges

爲了解決這個問題,我使用兩種方法在Activity持有ViewPager

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

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

有了這個,我們要確保所有的,只是需要的頁面變爲縱向住宿畫像(呼叫getActivity().enforcePortrait())和具有縱向/橫向視圖的整個重新啓動過程(呼叫getActivity().allowOrientationChanges())。

我們達到了想要將視頻添加到某些雜誌頁面的程度。不幸的是,HTML5視頻標籤無法正常工作,因此我們在版式中添加了VideoView。 現在增加的功能是:

    人像
  • :顯示在某個地方的視頻。 (完成!
  • in landscape:製作視頻全屏(如youtube應用程序)。

我一直在努力做到這一點,我發現的唯一方法是改變VideoView的大小在方法在Activity並且通知該配置改變fragment。與此相關的問題是將android:configChanges="orientation|keyboardHidden"添加到Activity將「禁止」要重新創建的視圖。

兩個可能的解決方案,我認爲:

  1. 從代碼更改android:configChanges並根據網頁上,但如果該呼叫存在,我無法找到。
  2. 強制重新使用方法。我不知道如何強制fragment的娛樂。

任何想法?

回答

0

我只是固定它。感謝您的回答。

我的解決辦法是讓Activityandroid:configChanges="orientation|keyboardHidden"標誌。

這樣做,我重寫Fragment內方法,其中我調整WebViewVideoView取決於我需要什麼之後。

編輯:

我只是做了blog post這一點。

2

也許有一種解決方法,方法是在名稱相似的清單中定義兩次活動,並將第二個化身設置爲enabled = false。然後通過調用PackageManager.setComponentEnabledSetting(....)來動態切換2個活動,但這只是一個想法,不知道它是否會起作用。

+0

我剛剛讀了一些關於'setComponentEnabledSetting()'方法。問題在於它需要一個由Component名稱和類名創建的「ComponentName」,所以活動名稱不能相同。如果這也將是解決這將是一樣的定義兩個不同的'activities'並推出他們的時候不健全的罰款:( – Macarse

2

我正在創建一個雜誌應用程序,它使用ViewPager並在不同的WebViews上滾動。

這樣可靠嗎?

大多數頁面都是肖像,但其中一些可以看作是景觀。

請允許所有頁面橫向瀏覽。如果您的用戶想要在橫向上查看您的應用 - 例如,他們不想僅僅爲了使用您的應用而將他們的電視機放在一邊 - 請讓他們。

任何想法?

在活動的onResume(),有它通知雜誌頁面片段基於當時的ConfigurationgetResources().getConfiguration())來修復其VideoView尺寸/位置。

+0

頁面滾動一)您可以通過可靠的是什麼意思? b)大多數頁面是全屏圖像,不幸的是我沒有資源在橫向模式下顯示它們。 c)我想在'onResume()'方法中添加該邏輯,但這意味着視頻會重新創建。不僅浪費資源,而且我需要將所有邏輯添加到'seekTo()'。 – Macarse

+0

@Macarse:「你通過可靠的意思是什麼?「 - 我預計'ViewPager'和'WebView'超過觸摸事件而戰。‘這將意味着視頻被重新創建’ - 真不過,我?有一種有趣的感覺,即你不能得到你想要的東西,我不知道你的兩個具體想法(你的問題的底部)是否可能。 – CommonsWare