2012-03-22 101 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