方向在2.3.3中不起作用?

时间:2012-03-05 12:03:15

标签: android android-orientation

我准备了一个应用程序。我的应用程序将支持横向和纵向。  当我将方向从纵向更改为横向时,它工作正常,但当我将横向更改为纵向时,它无法正常工作。我的代码是,

  public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);
        System.out.println("orientation---"+getResources().getConfiguration().orientation);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            setContentView(R.layout.main);
            System.out.println("landscape-----");
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.main);
            System.out.println("portrait-----");
        }

    }

每次只采用横向模式。我在某些地方犯了错误。请帮忙。

System.out.println("orientation---"+getResources().getConfiguration().orientation);

以上SOP正在打印2意味着景观。请帮助我。(我正在使用2.3.3)

3 个答案:

答案 0 :(得分:2)

你可能会遇到这个错误“方向不会在2.3上的模拟器上从横向变为纵向”

超过45人面临与androidd 2.3模拟器相同的问题

http://code.google.com/p/android/issues/detail?id=13189

  

主机操作系统:Windows 7 SDK工具版本:修订版8 Eclipse版本:3.5   ADT插件版本:8.0.1您的项目所针对的平台:2.3   在模拟器中运行的平台版本:2.3

     

再现的步骤:   1.活动1(无屏幕方向) - 活动2(屏幕方向=风景)

     
      
  1. 从活动1到2工作正常。按向后将活动1的方向更改为横向
  2.         

    预期结果:活动1应处于纵向模式

         

    观察结果:仅在姜饼中观察到行为,如同   期待在froyo。

答案 1 :(得分:2)

问题在于android:configChanges="orientation|keyboardHidden"

如果从androidmanifest.xml中删除|keyboardHidden,则onConfigurationChanged仅在从横向旋转到纵向时触发,而不是从纵向旋转到横向时(至少在默认模拟器中)。

希望这有帮助。

编辑:提供一些示例程序来测试它并且对我来说很好。

<强> CheckOrientationActivity.java

import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class CheckOrientationActivity extends Activity {


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Log.i("DayElevenActivity", "onCreate Start");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i("DayElevenActivity", "onConfigurationChanged");
        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.i("ORIENTATION_LANDSCAPE", "ORIENTATION_LANDSCAPE");
            Toast.makeText(getBaseContext(), "ORIENTATION_LANDSCAPE", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.i("ORIENTATION_PORTRAIT", "ORIENTATION_PORTRAIT");
            Toast.makeText(getBaseContext(), "ORIENTATION_PORTRAIT", Toast.LENGTH_SHORT).show();
        }
    }

}

AndroidManifest.xml

<activity
            android:label="@string/app_name"   
            android:configChanges="**orientation|keyboardHidden**"    
            android:name=".CheckOrientationActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

运行并更改方向时的相应日志

03-05 18:54:31.644: I/CheckOrientationActivity (20314): onCreate Start
03-05 18:54:35.014: I/CheckOrientationActivity (20314): onConfigurationChanged
03-05 18:54:35.014: I/ORIENTATION_LANDSCAPE(20314): ORIENTATION_LANDSCAPE
03-05 18:54:41.984: I/CheckOrientationActivity (20314): onConfigurationChanged
03-05 18:54:41.984: I/ORIENTATION_PORTRAIT(20314): ORIENTATION_PORTRAIT

答案 2 :(得分:1)

为什么会发生这种情况有很多原因,如果没有更多的代码就很难说清楚。

这里有一些指示:

  • 您没有通过清单文件或编程方式将布局强制转换为某个特定方向(例如清单中的<activity android:screenOrientation="portrait">

  • 默认情况下,在配置更改发生时重新启动Activity。如果您希望在方向更改时不重新启动活动,则需要使用

    机器人:configChanges = “取向”

关于活动在清单中的配置。

  • 上述观点实际上会让Android在调整方向时调用您的活动的onConfigurationChanged(Configuration)方法

==更新==

另外,如果你在layout-land和layout-port中声明了相同的布局(比如“main”),你只需要指定你想在开头使用那个布局:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

就是这样。

无需实施

public void onConfigurationChanged(Configuration newConfig) {
  //...
}

方法也是如此。为了根据方向选择正确的布局,您只需要在这两个文件夹中声明相同的布局。

(另外,没有必要将android:configChanges="orientation"添加到您的清单中,显然默认情况下它已启用)。我刚刚尝试了这一切,工作正常