为所有活动设置固定方向

时间:2016-06-28 12:24:21

标签: android orientation manifest

我知道有两种方法可以通过编程方式设置Activity的横向方向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

或在清单中:

android:orientation="landscape"

目前,我在超类中使用第一个,因为我有许多(孩子)活动,我都希望永远在风景中。但是,这样做 onCreate被调用两次,导致其他问题。当使用Manifest-route时,我必须将它分别应用于所有活动,这无疑会导致将来错过一个(更不用说所有的代码复制)。

有没有办法将android:orientation="landscape"应用于我的应用中的所有活动?

4 个答案:

答案 0 :(得分:1)

在清单中,为您的所有活动设置此项:

<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>

让我解释一下:

使用android:configChanges =&#34; orientation&#34;你告诉Android你将负责方向的变化。 机器人:screenOrientation =&#34;肖像&#34;您设置默认方向模式。

答案 1 :(得分:1)

或者您可以尝试为所有活动制作“超类”,并从“超类”扩展。

public abstract class SuperActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

答案 2 :(得分:0)

创建活动时,

OnCreate 将被调用。设置代码时

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

活动会重新创建,所以你无法阻止它。 (也许你可以尝试一下,当你得到一个解决方案试试发布..)

你必须以那种方式处理你的东西

可能的解决方案

  

机器人:configChanges =&#34; keyboardHidden |取向|屏幕尺寸&#34;       最明显的标签

  

直接在清单中添加方向属性

答案 3 :(得分:0)

我为应用程序类中的所有活动设置了屏幕方向。

import android.app.Application
import android.os.Bundle
import android.app.Activity
import android.content.pm.ActivityInfo

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        setListenerToCheckActivitySettings()
    }

    private fun setListenerToCheckActivitySettings() {

        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {

                activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
            }

            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityResumed(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
            override fun onActivityPaused(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}