我如何设置它,使应用程序只在纵向模式下运行?我希望在应用程序运行时禁用横向模式。如何通过编程实现呢?


当前回答

类似于Graham Borland的答案……但是如果你不想的话,你似乎不需要创建Application类…只需在项目中创建一个Base Activity

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

并且在你想使用Potrait Mode的地方扩展这个类而不是AppCompatActivity

public class your_activity extends BaseActivity {}

其他回答

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

您可以为整个应用程序这样做,而不必使所有活动扩展一个公共基类。

诀窍是首先确保在项目中包含Application子类。在它的onCreate()中,当你的应用程序第一次启动时调用,你注册了一个ActivityLifecycleCallbacks对象(API级别14+)来接收活动生命周期事件的通知。

这让你有机会在应用程序中的任何活动启动(或停止,或恢复,或其他)时执行自己的代码。此时,您可以在新创建的活动上调用setRequestedOrientation()。

class MyApp extends Application {

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

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

在config.xml中的<widget>下添加<preference name="orientation" value="portrait" />对我来说很有效。

(其他解决方案要么在我的设备上不起作用,要么在构建过程中被覆盖,要么在构建过程中给出了弃用错误。)

如果有人想知道,如何为整个应用程序做到这一点,而不必让所有活动都扩展Kotlin中的公共基类, 请看下面的例子:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

然后你必须像这样在AndroidManifest中添加你的公共基类:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

在你的Manifest中输入:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>