2012-12-18 40 views
6

我正在構建一個使用相機預覽的相機應用程序。爲了使用全屏幕預覽,我鎖定了活動與android屏幕方向:只鎖定部分佈局

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

現在我有以下問題:每當我渲染一種形式或我必須表現出一個對話框,它總是顯示了在橫向模式下,即使用戶在縱向模式下使用他/她的設備。 我試圖通過使用變形動畫來旋轉edittext視圖,並且它們被正確旋轉,但仍然無法再將它們對焦,並且鍵盤始終顯示在橫屏中:(

你是否知道任何方式的輪在這裏找到一種方法

要點:?檢測方向是不是這裏的問題,現在的問題是:我如何旋轉形式/視圖/ viewgroups和鍵盤的方式,它們仍然可以

我知道它應該有某種可能性:三星的相機應用程序(它與S3一起出現)能夠在沒有r的情況下旋轉視圖otating預覽,所以它必須是可能的! 見:

http://www.letsgomobile.org/images/reviews/0186/galaxy-s3-camera.jpg

http://cdn2.mos.techradar.futurecdn.net//art/mobile_phones/Samsung/GalaxyS3/Galaxy%20Fire/Samsung_Galaxy_S3_25-580-100.JPG

+0

您是否嘗試過使用實際對話框而不是使用實際的對話框作爲對話框(在活動描述中使用android:theme =「@ android:style/Theme.Dialog」)開始新的活動?我懷疑這個僞造的對話框應該以通常的方式對方向改變做出反應,因爲你只在橫向鎖定相機活動。不幸的是,我現在無法自己嘗試。 – Audrius

+0

還沒有試過呢。會很好,如果這樣的作品... – stoefln

+0

不工作 - 只是試過了:無論我如何旋轉設備,對話框活動也顯示在橫向上 – stoefln

回答

2

三星攝像機應用添加聽者與方向傳感器。如果用戶阻止設備旋轉,旋轉仍然發生。

您將需要創建完整的自定義窗口小部件,所以你不能用建立對話框,你必須表現出CustomDialog ....

的基本思想是利用OrientationEventListener,併到SensorManager。在設備旋轉上,您必須更新您的用戶界面並以新的方向旋轉視圖。以下是使用OrientationEventListener的教程How to use OrientationEventListener 在大多數相機應用程序上,該活動仍然在LANDSCAPE上被阻止。 所有相機應用程序都這樣做,以減輕隨着旋轉對SurfaceView尺寸變化的處理。

+0

我已經實現了,在這裏這不是問題的OrientationEventListener-之間電話的時間來重建整個界面的圖像......不過,所以你說的是我不能使用標準的ScrollView,Edittext和其他東西?我真的要寫我自己的嗎?三星widget(至少scrollviews)看起來像標準的Android視圖。你認爲有任何機會旋轉鍵盤? – stoefln

+0

你必須實現兩個方向(layout_portrait和佈局土地)。之後,當方向變爲0時,您必須設置人像,並且當旋轉變爲(270 + -20)時,您必須移除視圖並對風景進行充氣並將其附加。 –

+0

和鍵盤? – stoefln

0

你必須旋轉你的設備覆蓋活動的行爲,你必須在你的mafinest添加orientationChange然後爲此事件添加監聽器和手動旋轉你的看法。

如果你使用這種方法,所有的對話框等(系統視圖)將以正確的方式出現。

檢查: http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges

而且這樣的: How to handle screen orientation change when progress dialog and background thread active? (第二個答案我認爲)

+0

不明白。 「您必須通過旋轉設備來覆蓋活動的行爲」,您是什麼意思? – stoefln

+0

如果你在你的清單,你會處理configChanges說:orientaion - 你將能夠覆蓋onConfigurationChanged(配置)或這樣的事情,在這種方法優爾可以手動旋轉僅neccesarry意見 – dilix

+0

肯定的,但我已經寫,旋轉編輯文本或鍵盤編程不起作用。你知道怎麼做嗎? – stoefln

2

通過設置這個屬性

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

您只鎖定你的屏幕爲橫向,後即使用戶將設備保持在縱向模式下,也不會將其旋轉至縱向模式。根據我對你的問題的理解,你可以做一件事。

android:configChanges="orientation" 

在menifest文件上面這個屬性添加到您的活動。並且在Activity類中覆蓋onConfigurationChange方法,您可以根據需要處理方向更改,而不是將Activity鎖定到Landscape。

如果我以正確的方式瞭解您的問題,那麼它可以幫助您。

+0

我知道我可以做到這一點。但是,正如我已經寫道,我沒有設法呈現仍在工作的旋轉的edittext表單(或按鈕),並且鍵盤始終以橫向模式顯示。我怎麼旋轉COOL-不知道它可以旋轉敬酒消息的設備 – stoefln

0

您最好嘗試將另一個活動用作對話框並在清單中設置其屬性(方向和主題)並使用它。

+0

不與工作剛剛試了一下。但是,我仍然不知道如何旋轉表單元素 – stoefln

0

清單檔案中的給下面的屬性,你的相機預覽活動 android:configChanges="keyboardHidden|orientation"進行更關注屏幕閱讀this

<activity 
     android:name=".Your_Activity_Name" 
     android:configChanges="keyboardHidden|orientation" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <!-- Your filter attributes if any. --> 
     </intent-filter> 
    </activity> 

而在你的活動類重寫onConfigurationChanged &做要緊(如您需要)定位模式(例如,橫向或縱向)像THIS_

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     //Your code to do the other things in landscape mode... 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     //Your code to do the other things in portrait mode... 

    } 
} 

我希望這將幫助你擺脫你的問題。

+0

對話活動是橫向顯示也不管: – stoefln

+0

當屏幕方向改變時,android會處理這個問題。每次屏幕方向改變時它都會調用'onConfigurationChanged'。 –

+0

沒有,也不會照顧旋轉的,因爲我叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 以鎖定相機預覽景觀 - > Android將鎖定整個活動 – stoefln

0

afaik:旋轉是通過捕捉方向事件 並根據該方向使用新佈局使屏幕膨脹來實現的。

  1. 膨脹景觀
  2. 發生旋轉時
  3. 充氣要更改 即,例如我們與人像按鈕,而不是景觀的新佈局膨脹的按鈕持有者視圖屏幕的部分。

您必須將您的佈局剪切成您在運行時添加在一起的部分。

另一種方式來實現這一目標是使用一個方向變化用表面的觀點相機預覽實例,並使用另一個佈局,以保持表面,並在它的上面有framelayout

+0

我不想讓應用重新充氣。試想這是拍攝於45°模式 - 你肯定不希望每個用戶旋轉他/她的風景和肖像 – stoefln