代码之家  ›  专栏  ›  技术社区  ›  Sephy

防止Android上的屏幕旋转

  •  288
  • Sephy  · 技术社区  · 14 年前

    我有一个我想要防止旋转的活动,因为我正在启动一个异步任务,屏幕旋转使它重新启动。

    有没有办法告诉这个活动“即使用户像疯了一样摇晃手机,也不要旋转屏幕”?

    14 回复  |  直到 5 年前
        1
  •  421
  •   Tupio    6 年前

    android:screenOrientation="portrait" 
    

     android:screenOrientation="landscape" 
    

    <activity> 元素/秒输入 舱单,你就完了。

        2
  •  124
  •   Fattie    10 年前

    您可以按照下面的逻辑来防止自动旋转屏幕 虽然 你的 AsyncTask 正在运行:

    1. 将当前屏幕方向存储在活动中,使用 getRequestedOrientation() .
    2. 使用禁用自动屏幕方向 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .
    3. 运行/执行 异步任务
    4. 在你的最后 异步任务 使用恢复以前的定向状态 setRequestedOrientation(oldOrientation) .

    请注意,有几种访问方式 Activity (在UI线程上运行)属性 异步任务 . 您可以实现 异步任务 作为一个内部类,或者您可以使用消息 Handler 戳到你的 Activiy 班级。

        3
  •  26
  •   Sara    9 年前

    在清单文件中,对于要锁定屏幕旋转的每个活动,添加:如果要在水平模式下锁定它:

    <activity
            ...
            ...
            android:screenOrientation="landscape">
    

    或者如果要在垂直模式下锁定它:

    <activity
                ...
                ...
                android:screenOrientation="portrait">
    
        4
  •  23
  •   Richard    8 年前

    我发现最简单的方法是

    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    在OnCreate中,就在之后

    setContentView(R.layout.activity_main);
    

    所以…

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    
        5
  •  5
  •   Daniel Kutik Marcus    11 年前

    活动.java

    @Override     
     public void onConfigurationChanged(Configuration newConfig) {       
            try {     
                super.onConfigurationChanged(newConfig);      
                if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {      
                    // land      
                } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {      
                   // port       
                }    
            } catch (Exception ex) {       
         }   
    

    androidmanifest.xml文件

     <application android:icon="@drawable/icon" android:label="@string/app_name">
      <activity android:name="QRCodeActivity" android:label="@string/app_name"
      android:screenOrientation="landscape" >
       <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
      </activity>
    
     </application>
    
        6
  •  5
  •   Peter Mortensen Mohit    8 年前

    你可以这样做,而不是进入仙女座舱单:

    screenOrientation = getResources().getConfiguration().orientation;
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
    ... AsyncTask
    
    screenOrientation = getResources().getConfiguration().orientation;
    
    
    @Override
    protected void onPostExecute(String things) {
        context.setRequestedOrientation(PlayListFragment.screenOrientation);
        or 
        context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    }
    

    这里唯一的缺点是它需要API级别18或更高。所以基本上这是矛尖。

        7
  •  2
  •   Peter Mortensen Mohit    8 年前

    您只需要AndroidManifest.xml中活动的以下属性:

    android:configChanges="orientation"
    

    因此,完整的活动节点是:

    <activity android:name="Activity1"
              android:icon="@drawable/icon"
              android:label="App Name"
              android:excludeFromRecents="true"
              android:configChanges="orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    
        8
  •  1
  •   Peter Mortensen Mohit    8 年前

    添加:

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
            ...
            ...
            ...
    }
    
        9
  •  1
  •   andrewoodleyjr    6 年前

    将以下内容添加到androidmanifest.xml中

    [app>src>主>androidmanifest.xml]

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

    例子:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.zzzzzz.yyyyy">
    
       <uses-permission android:name="A-PERMISSION" />
    
       <application>
          <activity android:name=".MainActivity"
                    android:screenOrientation="portrait"
                    android:configChanges="orientation">
          </activity>
       </application>
    
    </manifest>
    
        10
  •  0
  •   Peter Mortensen Mohit    8 年前

    如果您正在使用 Android Developer Tools (ADT)和 Eclipse 您可以转到androidmanifest.xml--> 应用 选项卡-->向下选择您的活动。最后,选择你喜欢的方向。 您可以从许多选项中选择一个。

        11
  •  0
  •   Richard    8 年前

    您必须在manifest.xml文件中添加以下代码。 不应为其旋转的活动,在该活动中添加此元素

    android:screenOrientation="portrait"
    

    这样它就不会旋转了。

        12
  •  0
  •   Muhaiminurabir    6 年前

    你可以这样试试

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itclanbd.spaceusers">
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Login_Activity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    

        13
  •  0
  •   Argus Waikhom    6 年前

    使用 异步任务加载器 即使活动发生变化,也要确保数据安全,而不是使用 异步任务 这是一个比阻止屏幕旋转更好的方法来构建应用程序。

        14
  •  0
  •   DEVSHK    5 年前

    阻止屏幕旋转只需在清单中添加以下行。

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

    这对我有用。