我试图为我的应用程序强制“纵向”模式,因为我的应用程序绝对不是为“横向”模式设计的。

在阅读了一些论坛后,我在我的清单文件中添加了这些行:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:screenOrientation="portrait">

但它不能在我的设备(HTC Desire)上使用。它从“纵向”切换到“横向”,忽略清单文件中的行。

在更多的论坛阅读后,我试图在我的清单文件中添加以下内容:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:configChanges="orientation"       
  android:screenOrientation="portrait">

这个函数在activity类中

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

但是,还是不走运。


当前回答

如果你有很多像我这样的活动,在你的应用程序中,或者如果你不想在manifest中为每个活动标签输入代码,你可以这样做。

在你的Application Base类中,你会得到一个生命周期回调

基本上,在每个活动中,当在应用程序类中创建时发生的事情是在这里被触发的代码。

public class MyApplication extends Application{

@Override
    public void onCreate() {
        super.onCreate();  

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}

我希望这能有所帮助。

其他回答

我认为你要添加android:configChanges="定向|keyboardHidden"到你的活动?否则,该活动将在config-change上重新启动。onConfigurationChanged不会被调用,只有onCreate被调用

请注意,

android:screenOrientation="portrait"     
android:configChanges="orientation|keyboardHidden"

添加到清单文件中—其中定义了活动。

补充一点:我最近更新了一个应用程序,之前的应用程序可以在横向和纵向模式下工作,我希望更新的版本可以在纵向模式下工作,所以我添加了

android:screenOrientation="portrait"

到相应的活动,当我测试更新时,它崩溃了。然后我补充道

android:configChanges="orientation|keyboardHidden"

也是,而且很管用。

我在androidmanifest。xml中有这一行

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:theme="@android:style/Theme.Black.NoTitleBar">

我把它改成了(刚刚添加了android:screenOrientation="portrait")

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar">

这为我解决了问题。

不要将定向应用到应用程序元素,相反,您应该将属性应用到活动元素,并且您还必须按照下面所述设置configChanges。

例子:

<activity
   android:screenOrientation="portrait"
   android:configChanges="orientation|keyboardHidden">
</activity>

这应用于清单文件AndroidManifest.xml。