2011-04-06 181 views
3
public class testScreenRotation extends Activity { 
/** Called when the activity is first created. */ 

private int mRuntimeOrientation; 
    private boolean mDisableScreenRotation=true; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mRuntimeOrientation = this.getScreenOrientation(); 
    setContentView(R.layout.main); 


} 
protected int getScreenOrientation() { 
/* 
    Display display = getWindowManager().getDefaultDisplay(); 
    int orientation = display.getOrientation(); 

    if (orientation == Configuration.ORIENTATION_UNDEFINED) { 
     orientation = getResources().getConfiguration().orientation; 

     if (orientation == Configuration.ORIENTATION_UNDEFINED) { 
      if (display.getWidth() == display.getHeight()) 
      orientation = Configuration.ORIENTATION_SQUARE; 
      else if(display.getWidth() < display.getHeight()) 

      orientation = Configuration.ORIENTATION_PORTRAIT; 
      else 
      orientation = Configuration.ORIENTATION_LANDSCAPE; 
      } 
     } 


    return orientation; 
    */ 
    return Configuration.ORIENTATION_PORTRAIT; 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
     if (mDisableScreenRotation) { 
      super.onConfigurationChanged(newConfig); 
      this.setRequestedOrientation(mRuntimeOrientation); 
      } else { 
      mRuntimeOrientation = this.getScreenOrientation(); 
      super.onConfigurationChanged(newConfig); 
      } 
     } 

} 

我的應用程序,並添加機器人:在xml.when configChanges =「方向」我的應用程序開始我的屏幕是人像,我按下CTRL + F12,屏幕也roate ,屏幕是LANDSCAPE,第二我按Ctrl + F12,屏幕也旋轉,屏幕是PORTRAIT,然後我按下Ctrl + F12,屏幕保持PORTRAIT。所以我再次按下,屏幕保持PORTRAIT。我的問題是,爲什麼我的屏幕在應用程序啓動時不保持PORTRAIT。禁用屏幕旋轉在Android如上

編輯:我想用代碼來控制屏幕旋轉,如果我能做到這一點?

回答

15

如果你試圖讓你的應用程序是在人像模式中的所有的時間,你可以把這個信號的元素在清單

android:screenOrientation="portrait" 

加入這一行中的每個活動在AndroidManifest.xml文件。

+0

感謝您answer.i還我可以用代碼來保持屏幕肖像 – pengwang 2011-04-06 09:54:49

+0

@pengwang它是否解決問題了嗎?如果是這樣,請接受它作爲答案。 – pecka85 2011-04-11 08:48:54

+0

不,我找不到方法 – pengwang 2011-04-11 09:32:53

4

更改AndroidManifest.xml文件。這就夠了。現在

<activity android:name="Activity_Name" android:screenOrientation="portrait"/>

您的應用程序不會改變方向。

+0

感謝您的回答,我希望在運行時使用代碼禁用屏幕旋轉。 – pengwang 2011-04-06 09:55:44

7

我相信你正在尋找的方法是Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_<PORTRAIT/LANDSCAPE>)

這與

android:configChanges="orientation"

在顯明活動告訴你將處理方向,系統自己應該禁用自動重新定向在一起。

+1

我已經解決了這個問題,但我不需要android:configChanges =「orientation」 – pengwang 2011-04-11 09:46:18

0

您也可以在運行時從Java源代碼禁用屏幕旋轉。
剛剛嘗試這種方式

private void setAutoRotation(final boolean autorotate) { 
     AsyncTask.execute(new Runnable() { 
      public void run() { 
       try { 
        IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); 
        if (autorotate) { 
         wm.thawRotation(); 
        } else { 
         wm.freezeRotation(-1); 
        } 
       } catch (RemoteException exc) { 
        Log.secW(TAG, "Unable to save auto-rotate setting"); 
       } 
      } 
     }); 
    } 

現在試試你的應用程序在運行時調用此方法。可能在某些方法或某些按鈕上。

setAutoRotation(false); 

setAutoRotation(true);