web-dev-qa-db-ja.com

「縦」向きモードを強制する

私のアプリケーションは絶対に「横」モード用に設計されていないので、私は自分のアプリケーションに「縦」モードを強制しようとしています。

いくつかのフォーラムを読んだ後、私は私のマニフェストファイルにこれらの行を追加しました:

<application 
  Android:debuggable="true"
  Android:icon="@drawable/icon" 
  Android:label="@string/app_name"
  Android:screenOrientation="portrait">

しかし、それは私のデバイスでは動作しません(HTC Desire)。マニフェストファイルの行を無視して、 "portrait"から "landscape"に切り替わります。

もっとフォーラムを読んだ後、私はこれを私のマニフェストファイルに追加しようとしました:

<application 
  Android:debuggable="true"
  Android:icon="@drawable/icon" 
  Android:label="@string/app_name"
  Android:configChanges="orientation"       
  Android:screenOrientation="portrait">

そして私の活動クラスでこの関数:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

しかし、幸運にも。

274
thomaus

application要素に方向を適用しないでください。代わりに、アクティビティに属性を適用してください要素であり、以下に示すようにconfigChangesも設定する必要があります。

例:

<activity
   Android:screenOrientation="portrait"
   Android:configChanges="orientation|keyboardHidden">
</activity>

これはマニフェストファイルAndroidManifest.xmlに適用されます。

501
C0deAttack

ご了承ください

Android:screenOrientation="portrait"     
Android:configChanges="orientation|keyboardHidden"

アクティビティが定義されているマニフェストファイルに追加されます。

22
NULL pointer

Android:screenOrientation="portrait"は個々の活動に使えると思います。そのため、<activity>タグでその属性を使用します。

<activity Android:name=".<Activity Name>"
    Android:label="@string/app_name" 
    Android:screenOrientation="portrait">
   ...         
</activity>
12
Pinki

私のようにたくさんのアクティビティがある場合は、アプリケーションで、またはマニフェストで各アクティビティタグのコードを入力したくない場合は、これを実行できます。

アプリケーションベースクラスでは、ライフサイクルコールバックを取得します。

そのため、基本的には、アプリケーションクラスでon createを作成するときに各アクティビティに対して行われるのは、コードです。

public class MyApplication extends Application{

@Override
    public void onCreate() {
        super.onCreate();  

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}

これが役に立つことを願っています。

9
Muneef M

Set強制的にPo​​rtraitまたはLandscapeモード、それぞれ行を追加.

下の行にインポート

import Android.content.pm.ActivityInfo;

setContentView(R.layout.activity_main);のすぐ上に下の行を追加

ポートレートの場合:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait

造園の場合:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape

これは間違いなくうまくいきます。

6
Parth Patel

Androidのドキュメントによると、設定変更の可能性としてscreenSizeも含めるべきです。

Android:configChanges="orientation|screenSize"

アプリケーションが(minSdkVersion属性およびtargetSdkVersion属性で宣言されているように)APIレベル13以上をターゲットにしている場合は、 "screenSize"構成も宣言する必要があります。

また、すべての例に値keyboardHiddenを含める場合は、localemccfontScalekeyboardなどを考慮しないでください。

3
Martynas

私のAndroidManifest.xmlにこの行がありました

<activity 
    Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    Android:label="@string/app_name" Android:name="Project Name"
    Android:theme="@Android:style/Theme.Black.NoTitleBar">

私が変更したもの(ちょうどAndroid:screenOrientation="portrait"を追加した)

<activity 
    Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    Android:label="@string/app_name" Android:name="Project Name"
    Android:screenOrientation="portrait"
    Android:theme="@Android:style/Theme.Black.NoTitleBar">

これで私のことは解決しました。

3
Ian Jamieson

補足:最近アプリを更新しました。前のバージョンは横長モードと縦長モードの両方で動作していました。最新バージョンを縦長モードで動作させる必要があるので、追加しました。

Android:screenOrientation="portrait"

対応するアクティビティに、そしてそれは私がアップデートをテストしたときにクラッシュしました。それから私は加えた

Android:configChanges="orientation|keyboardHidden"

また、それはうまくいきます。

2
user2819453

debugreleaseのビルドで異なる向きをサポートしたい場合は、 を参照してください。マニフェスト ).

appフォルダのbuild.gradleに次のように書いてください。

Android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "fullSensor"]
        }
        release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "portrait"]
        }
    }
}

AndroidManifestでは、この変数 "orientation"を任意のActivityで使用できます。

<activity
    Android:name=".LoginActivity"
    Android:screenOrientation="${orientation}" />

Android:configChangesを追加することができます:

debugのmanifestPlaceholders = [configChanges: "", orientation: "fullSensor"]とreleaseのmanifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"]

<activity
    Android:name=".LoginActivity"
    Android:configChanges="${configChanges}"
    Android:screenOrientation="${orientation}" />
1
CoolMind

Android:configChanges="orientation|keyboardHidden"をあなたのアクティビティに追加したいと思いますか?そうでなければ、アクティビティはconfig-changeで再起動されます。 onConfigurationChangedはそのとき呼び出されず、onCreateのみが呼び出されます。

1
Nanne