私のアプリケーションは絶対に「横」モード用に設計されていないので、私は自分のアプリケーションに「縦」モードを強制しようとしています。
いくつかのフォーラムを読んだ後、私は私のマニフェストファイルにこれらの行を追加しました:
<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);
}
しかし、幸運にも。
application要素に方向を適用しないでください。代わりに、アクティビティに属性を適用してください要素であり、以下に示すようにconfigChanges
も設定する必要があります。
例:
<activity
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden">
</activity>
これはマニフェストファイルAndroidManifest.xml
に適用されます。
ご了承ください
Android:screenOrientation="portrait"
Android:configChanges="orientation|keyboardHidden"
アクティビティが定義されているマニフェストファイルに追加されます。
Android:screenOrientation="portrait"
は個々の活動に使えると思います。そのため、<activity>
タグでその属性を使用します。
<activity Android:name=".<Activity Name>"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
...
</activity>
私のようにたくさんのアクティビティがある場合は、アプリケーションで、またはマニフェストで各アクティビティタグのコードを入力したくない場合は、これを実行できます。
アプリケーションベースクラスでは、ライフサイクルコールバックを取得します。
そのため、基本的には、アプリケーションクラスで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) {
}
});
}
これが役に立つことを願っています。
Set強制的にPortraitまたは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
これは間違いなくうまくいきます。
Androidのドキュメントによると、設定変更の可能性としてscreenSize
も含めるべきです。
Android:configChanges="orientation|screenSize"
アプリケーションが(minSdkVersion属性およびtargetSdkVersion属性で宣言されているように)APIレベル13以上をターゲットにしている場合は、 "screenSize"構成も宣言する必要があります。
また、すべての例に値keyboardHidden
を含める場合は、locale
、mcc
、fontScale
、keyboard
などを考慮しないでください。
私の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">
これで私のことは解決しました。
補足:最近アプリを更新しました。前のバージョンは横長モードと縦長モードの両方で動作していました。最新バージョンを縦長モードで動作させる必要があるので、追加しました。
Android:screenOrientation="portrait"
対応するアクティビティに、そしてそれは私がアップデートをテストしたときにクラッシュしました。それから私は加えた
Android:configChanges="orientation|keyboardHidden"
また、それはうまくいきます。
debug
とrelease
のビルドで異なる向きをサポートしたい場合は、 を参照してください。マニフェスト ).
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}" />
Android:configChanges="orientation|keyboardHidden"
をあなたのアクティビティに追加したいと思いますか?そうでなければ、アクティビティはconfig-changeで再起動されます。 onConfigurationChanged
はそのとき呼び出されず、onCreate
のみが呼び出されます。