我希望我的Android应用程序仅以纵向模式运行吗?


Answers:


778

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

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

让我解释:

  • 随着android:configChanges="orientation"你告诉的Android,你会负责的取向的变化。
  • android:screenOrientation="portrait" 您设置默认的方向模式。

50
如果我们可以为应用程序中的所有活动设置“全局”方向,那将不是很好吗?看来我们别无选择,只能在每个活动上复制/粘贴“肖像”属性...
Eduardo Coelho

63
足以设定android:screenOrientation="portrait"
直到

11
@EduardoCoelho您实际上可以创建一个基类,PortraitActivity并且可以在onCreate调用中进行setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)扩展,所有活动都不会旋转
Twinone 2014年

1
@Twinone:当不同的活动想要从的不同子类继承时Activity,比如一个活动从扩展ListActivity而其他活动从扩展,又Activity如何呢?
RestInPeace 2014年

3
@RestInPeace是的,很好。但这不是我的想法错了,只是Java不支持多重继承:)
Twinone 2014年

57

在Android清单文件,把属性为你的<activity>那个android:screenOrientation="portrait"


2
让我补充一下:从Android Sudio 3.6开始,需要使用android:screenOrientation =“ fullSensor”或android:screenOrientation =“ unspecified”。fullSensor表示您是否启用了“关闭旋转”功能,否则它将根据您移动手机而改变方向。未指定表示如果启用了“关闭旋转”功能,则它将仅保持该方向,否则将根据您移动手机而更改方向。
Kirguduck

24

有两种方法,

  1. android:screenOrientation="portrait"为清单文件中的每个活动添加
  2. this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);在每个Java文件中添加。

14
第二个选项具有可怕的副作用,当在Portrait中启动时,它将重新启动活动。
约阿基姆(Joakim)

4

在清单中:

<activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

或:在MainActivity中

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

我懂了app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.。添加xmlns:tools="http://schemas.android.com/tools"在根元素解决问题
Żabojad

3

我知道的旧帖子。为了即使在方向可能改变或交换方向等情况下(例如在平板电脑上)也始终以纵向模式运行您的应用,我设计了此功能,该功能用于将设备设置为正确的方向,而无需了解纵向和横向功能在设备上组织。

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

奇迹般有效!

注意:this.activity根据您的活动进行更改或将其添加到主要活动中并删除this.activity;-)


-5

我用

 android:screenOrientation="nosensor"

如果您不想支持上下颠倒的肖像模式,这将很有帮助。


如果这样做符合我的想法,实际上并不会迫使屏幕纵向显示,您可能想要这样做。
Lassi Kinnunen 2014年

您为什么不删除此评论!它没有任何意义
亚历山大Zaldostanov

在Android清单文件只添加属性,为你的<活动>是安卓screenOrientation =“肖像”
阿维纳什·辛德

感谢您的回答,这对我很有帮助。
Shofiulla博士
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.