web-dev-qa-db-ja.com

Androidで画面の回転を防ぐ

AsyncTaskを開始していて、画面を回転させると再起動するため、回転を防止したいアクティビティが1つあります。

この動作を「ユーザーが狂ったように自分の携帯電話を振っている場合でも、画面を回転させないでください」と伝える方法はありますか?

296
Sephy

追加する

Android:screenOrientation="portrait" 

または

 Android:screenOrientation="landscape" 

マニフェストの<activity>要素に追加すれば完了です。

434
lbedogni

以下のロジックに従って画面の自動回転を防ぐことができますwhileあなたのAsyncTaskは実行中です:

  1. getRequestedOrientation() を使用して、現在の画面の向きをアクティビティ内に保存します。
  2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) を使用して自動画面方向を無効にします。
  3. AsyncTaskを実行または実行します。
  4. AsyncTaskの最後に setRequestedOrientation(oldOrientation) を使って以前のオリエンテーションステータスを復元します。

Activity内でAsyncTask(UIスレッド上で動作する)プロパティにアクセスするにはいくつかの方法があります。 AsyncTaskを内部クラスとして実装することも、Handlerクラスを突くメッセージ Activiy を使うこともできます。

124
Emre Yazici

マニフェストファイルで、画面の回転をロックしたい各アクティビティに対して、水平モードでロックしたい場合は、以下を追加します。

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

または、縦モードでロックしたい場合は、

<activity
            ...
            ...
            Android:screenOrientation="portrait">
26
Sara

私がこれをすることを見つけた最も簡単な方法は置くことでした

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);
}
23
Paul Alexander

AndroidManifestに入るのではなく、次のようにします。

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以上が必要なことです。だから基本的にこれは槍の先端です。

Activity.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>
5
Li Che

AndroidManifest.xmlのACTIVITYにある次の属性だけが必要です。

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>
2
Ben

以下をAndroidManifest.xmlに追加します

[[app> src> main> 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>
1
andrewoodleyjr

追加:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        ...
        ...
        ...
}
1
Anas

Android Developer Tools (ADT)および Eclipse を使用している場合は、AndroidManifest.xml - >アプリケーションに移動できますタブ - >下に移動してあなたの活動を選択してください。最後に、好みの向きを選択してください。あなたは多くのオプションのうちの1つを選択することができます。

0
Husam

AsyncTaskを使用する代わりに、アクティビティが変更されてもデータを安全に保つには、AsyncTaskLoaderを使用します。これは、画面の回転を防ぐよりも優れた方法です。

0
Bbake Waikhom

Manifest.xmlファイルに次のコードを追加する必要があります。回転してはいけないアクティビティ、そのアクティビティにこの要素を追加する

Android:screenOrientation="portrait"

それから回転しません。

0
Simon Chius

画面の回転を防ぐには、マニフェストに次の行を追加するだけです。

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

これは私のために働きます。

0
DEVSHK

あなたはこのように試すことができます

<?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>
0