アプリケーション全体を縦向きモードでのみ設定する方法は?


201

アプリケーションを縦向きモードでのみ実行するように設定するにはどうすればよいですか?アプリケーションの実行中にランドスケープモードを無効にしたいのですが。プログラムでそれをどのように行うのですか?

回答:


293

すべてのAndroidバージョン

XMLから

android:screenOrientation="portrait"manifest.xmlファイルで各アクティビティを指定できます。applicationタグにこのオプションを指定することはできません。

Javaから

他のオプションは、たとえばActivity基本クラスでプログラムで行うことです。

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Android 4以降(API 14以降)

最後のオプションは、Android 4.0(API 14以降)以降でのみ利用可能なアクティビティライフサイクルリスナーでそれを行うことです。すべてがカスタムApplicationクラスで発生します。

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapter空の実装となる、作成する必要のある単なるヘルパークラスですActivityLifecycleCallbacks(そのため、単に1つが必要なときに、そのインターフェイスのすべてのメソッドをオーバーライドする必要はありません)。


1
機能していません。デバイスを回すと横向きモードになります。そして、私はこれらのsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);を使用しているコードでより多くのこと; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); プログレスバーの説明。これらの指示に問題はありますか?
naresh

それは働いています。もう1つ、コーディング部分で上記の2つの命令を記述しないでください。つまり、センサーが画面の向きを変更できるようになります。
naresh

3
-1:質問者は、具体的に//プログラムで//およびアプリケーション全体に対してそれを行う方法を要求しました(これにより、各アクティビティに対して個別にそれを行いたくないと思います)。
jwir3 14

@ jwir3、同意しません。「プログラミング」とは、単にコードコードを記述するだけでなく、すべてのメタファイル、使用するリソース、IDEの特異性を回避することなども含みます。これは良い答えであり、問​​題修正し、OPはそれを正しいとマークしました。明らかに、元の質問に対する十分な答えです。
James Webster

9
LifeCycleCallbacksメソッドを使用すると、デバイスを(通常は)ランドスケープモードに保持したときに、アクティビティの起動に遅延が生じます。デバイスがアクティビティの間に一時的に横向きモードに戻り、これを処理するために時間が必要なためです。マニフェストで方​​向を設定しても、この効果はありません。
匿名

142

はい、これはプログラムで行うことも、すべてのアクティビティに対して、すべてのアクティビティが拡張するAbstractActivityを作成することもできます。

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

この抽象アクティビティは、グローバルメニューにも使用できます。


3
注:私はそれを信じています ActivityInfo.SCREEN_ORIENTATION_NOSENSOR一部のデバイスは縦向きではないため、デバイスをデフォルトの状態のままにすることを目的としているため、これがより良い答えになるはずです。ただし、「nosensor」は私にとっては機能しないため、@ arconeの答えは私にとって有効です。
David Manpearl 2014年

104

すべてのアクティビティで共通の基本クラスを拡張する必要なく、アプリケーション全体でこれを行うことができます。

秘訣は、まず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);

            }

            ....

        });

    }
}

9
これが質問に対処する唯一の答えです。それらすべてを支配する1行。
Samuel

2
*それらすべてを支配する1つのクラス。
Jay Mayu

3
マニフェストアプリケーションルートを追加することを忘れないでください。android:name = "。MyApp"
Faisal Naseer 2016年

2
このアプローチでは、アクティビティのonCreate()を2回呼び出します。
Sandeep R 2017

3
問題は、デバイスを水平に保持して新しいアクティビティを開始すると、デバイスが横向きに表示され、次に縦向きに回転することです。アプリ全体を縦向きにロックする唯一の良い方法のように見えますが、マニフェストですべてのアクティビティをマークすることです。
Den

42

これはマニフェストファイルで設定できます。

android:name=".your launching activity name"
android:screenOrientation="portrait"

また、クラスファイルに次のようにコードを記述することで同じことを実現できます。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1
@ naresh plsは、必要に応じて解決策を得た場合、ansを受け入れます
。SRamは

24

android:screenOrientation = "portrait"をAndroidManifest.xmlのアクティビティに追加します。例えば:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

25
彼はアプリケーションは活動ではないと述べた。
2013

10

使用する:

android:screenOrientation="portrait" 

この行を、ポートレートモードでのみ表示する各アクティビティのアプリケーションのマニフェストファイルに書き込むだけです。


8

すべてのアクティビティについて、これをマニフェストファイルに書き込みます。

android:screenOrientation="portrait" 

2

Android開発者ガイドから:

"orientation"画面の向きが変更されました—ユーザーがデバイスを回転させました。注:アプリケーションがAPIレベル13以上をターゲットにしている場合(minSdkVersionおよびtargetSdkVersion属性で宣言されているとおり)、「screenSize」構成も宣言する必要があります。これは、デバイスが縦向きと横向きの間で切り替わるときにも変化するためです。

"screenSize"現在使用可能な画面サイズが変更されました。これは、現在のアスペクト比に対する現在利用可能なサイズの変化を表すため、ユーザーが横向きと縦向きを切り替えると変化します。ただし、アプリケーションがAPIレベル12以下をターゲットにしている場合、アクティビティは常にこの構成変更を自身で処理します(この構成変更は、Android 3.2以降のデバイスで実行されている場合でも、アクティビティを再開しません)。APIレベル13で追加されました。

したがって、AndroidManifest.xmlファイルには、次のように記述できます。

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

<preference name="orientation" value="portrait" />下に追加<widget>config.xmlのにとうまくいきました。

(他のソリューションは私のデバイスでは機能しなかったか、ビルド中に上書きされたか、ビルドプロセス中に非推奨エラーを出しました。)


上記のconfig.xmlはどこにありますか?どの開発プラットフォームを参照していますか?
Tash Pemhiwa 2016年

1

マニフェストファイルで、"portrait"で使用するアクティビティを次のコードをActivityタグに記述する必要があります

  android:screenOrientation="portrait" 

このような

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

しかし、画面を横向きにしたい場合は、このコードを次のように使用します

android:screenOrientation="landscape"

1
@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);
}

0

誰かが疑問に思っている場合、すべてのアクティビティに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"

0

それには2つの方法があります。

  1. android:screenOrientation="portrait"マニフェストファイルを対応するアクティビティに追加 します
  2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); `onCreate()メソッドでアクティビティに追加 する

0

Graham Borlandの回答に似ています...しかし、必要ない場合はApplicationクラスを作成する必要がないようです...プロジェクトで基本アクティビティを作成するだけです

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モードを使用するAppCompatActivityの代わりにこのクラスを拡張します。

public class your_activity extends BaseActivity {}

0

Xamarinユーザーの場合:

すべてのアクティビティをBaseActivityJust追加に拡張する場合:

this.RequestedOrientation = ScreenOrientation.Portrait;

これで問題が解決します。特定のアクティビティをランドスケープにしたい場合は、でこれをオーバーライドしますOnActivityCreated。なので:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

マニフェストに次のように入力します。

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

6
これは、3年前の回答がまだ言っていない新しいものを追加しません。あなたはそれを削除することを検討するかもしれません。回答を編集して他の回答と区別するための情報を追加する場合は、@返信してください。
Artjom B. 14

1
android:screenOrientation = "portrait"はアプリケーションタグに追加できません。アクティビティタグ内に配置する必要があります
Hossein Amini
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.