2012-03-22 103 views
0

其實我已經創建了一個簡單的應用程序,我想在屏幕方向的變化上顯示另一個活動。我已經通過了堆棧溢出中給出的文檔和示例,並通過使用這個我已經生成了我的應用程序和它的工作正常。但我唯一的疑問是,如果在我的主要活動的activity標籤內的清單文件中,如果我使用android:screenOrientation="portrait"然後運行應用程序,那麼在屏幕方向的更改上我的下一個活動不會打開,但是如果我刪除此代碼從清單然後它工作正常。顯示屏幕方向變化的活動問題

所以我的問題是,如果我希望我的主要活動總是以縱向模式打開的話,我應該在主要活動的清單中使用此代碼..如果我這樣做然後在屏幕的變化我的下一個活動未開啓。

所以任何人都可以幫助我解決這個問題。我已經使用的代碼是:

代碼清單文件

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".MainActivity" 
     android:configChanges="orientation" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ChartEngineActivity" 
     android:configChanges="keyboardHidden|orientation" > 
    </activity> 
</application> 

代碼在主活性

public class MainActivity extends Activity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.main); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
     this.startActivity(intentNotes); 
     finish(); 
    } 
} 
+1

刪除這個'android:screenOrientation =「portrait」'bez你的活動總是在肖像模式下打開所以'onConfigurationChanged'不叫 – 2012-03-22 06:09:37

+0

我想你不明白我的問題..我知道它會工作,如果我刪除android:screenOrientation =「肖像」,但讓我們考慮一種情況..如果用戶通過橫向模式打開我的應用程序,那麼發生在我的主要活動中的事件也將以橫向模式打開。所以我總是以肖像模式打開我的主要活動,我用這個。所以我的問題是可以通過不替換這些代碼來完成我的工作。 – AndroidDev 2012-03-22 06:16:30

+0

Anshuman,在MainActivity的'onCreate'中設置屏幕方向代碼在清單文件中不是靜態的 – 2012-03-22 06:24:11

回答

0

變化screenOrientation通過代碼MainActivity這樣的:

public class MainActivity extends Activity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      int getConf=this.getResources().getConfiguration().orientation; 

      if(getConf==Configuration.ORIENTATION_PORTRAIT) 
      { 
       // this.setRequestedOrientation(
       // ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

       Toast.makeText(getBaseContext(), "ORIENTATION_PORTRAIT", Toast.LENGTH_SHORT).show(); 
      } 
      else 
      { 

       Toast.makeText(getBaseContext(), "ORIENTATION_LANDSCAPE", Toast.LENGTH_SHORT).show(); 
       this.setRequestedOrientation(
         ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      } 

       setContentView(R.layout.main); 
     } 
    } 


@Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
     this.startActivity(intentNotes); 
     finish(); 
    } 
+0

這是如何解決我的問題的。你可以解釋它。 – AndroidDev 2012-03-22 06:23:27

+0

@imrankhanthis不會工作,我想...看到這個鏈接.. http://stackoverflow.com/questions/6457659/android-onconfigurationchanged-not-being-called – 5hssba 2012-03-22 06:26:51

+0

@raju是的,你的權利..這將無法正常工作解決我的問題。 – AndroidDev 2012-03-22 06:30:39

0

android:screenOrientation="portrait" 

使用

android:screenOrientation="sensorPortrait" 

Portrait orientation, but can be either normal or reverse portrait based on the device sensor. Added in API level 9. 

,而不是可能是這可以幫助有點... 這將致電

onConfigurationChanged(Configuration newConfig) also.. 
+0

謝謝raju ...但我的應用程序是使用API​​級別8 .. – AndroidDev 2012-03-22 06:39:01

0

先不要改變關於定向什麼在你的清單...和不固定取向也.. 然後在OnCreate中 做這樣

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    int k=getResources().getConfiguration().orientation; 
       if(k==Configuration.ORIENTATION_LANDSCAPE){ 
        Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
    this.startActivity(intentNotes); 
    finish(); 
    } 
    @Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    if(k==Configuration.ORIENTATION_LANDSCAPE){ 
        Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
    this.startActivity(intentNotes); 
    finish(); 
    } 
} 

    } 
+0

希望這項工程.. – 5hssba 2012-03-22 07:49:49

+0

我應該在主要活動的OnCreate()或內部onConfigurationChanged()內寫入此代碼。在我的清單文件中,我應該保持android:screenOrientaion =「portrait」。這裏有什麼?如果可能的話,你可以在我的代碼 – AndroidDev 2012-03-22 08:59:55

+0

中顯示它在清單保持screenOrientaion =「肖像」,並在您的活動的oncreate添加此代碼...並讓我知道如果這工作...現在它爲我工作..我試過了.. – 5hssba 2012-03-22 09:01:44

0

讓假設你有共有3個活動,他們是主要的, Activity1和Activity2。

你首先要聲明的所有清單中的三項活動,但沒有設置該屬性爲配置屏幕方向

假設您的主要活動正在啓動activity1。

現在來到Activity1。 Activity1處於縱向模式並顯示列表視圖。 所以onCreate() Activity1的方法檢查活動的方向,如果方向處於橫向模式,只需啓動Activity2並完成Activity1中的Activity1 else顯示列表視圖。並且在onConfigurationChanged方法中再添加一件東西檢查新​​配置,如果它是橫向模式,則啓動Activity2並完成Activity1。

現在來到Activity2。 Activity2處於橫向模式,例如顯示一個Gridview。 所以onCreate()方法Activity2檢查方向,如果方向是肖像然後啓動Activity1並完成Activity2 else在Activity2中顯示Gridview並且在onConfigurationChanged方法中再添加一個東西檢查新​​配置,如果它是縱向模式啓動Activity1和完成Activity2。

如何檢查配置

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_PORTRAIT) { 
    //Portrait 
}else { 
    //Landscape 
} 

活性1應該有如下

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_LANDSCAPE) { 
    startActivity(new Intent(this, Activity2.class)) 
    finish(); 
} 

活性2會看起來像下面

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_PORTRAIT) { 
    startActivity(new Intent(this, Activity1.class)) 
    finish(); 
} 

同樣的方法,您將不得不覆蓋onConfigurationChanged方法並檢查方向,就像我們已經檢查過上面一樣,並採取適當的措施,例如我們已經開始新活動並完成當前活動。

+0

好的...現在我的問題是如果用戶將手機放在橫向模式下,並且啓動應用程序,然後根據你的邏輯哪些活動是開放的..我認爲它的活動2.但正如你說的應用程序的開始總是打開activity1。 – AndroidDev 2012-03-26 06:07:56

+0

我寫了一個錯字,但現在它已經完美了。根據我的答案activity1只能以縱向方式運行,因此如果您在橫向模式下運行應用程序,並且如果嘗試啓動應用程序,則Activity1將被調用,但發生了什麼事是它會檢查onCreate方法中的配置,它會查找橫向方向,所以它會啓動Activity2,它會完成。 – Dharmendra 2012-03-26 06:43:17

+0

好..我會檢查並讓你知道.... – AndroidDev 2012-03-26 06:52:49