我试图为我的应用程序强制“纵向”模式,因为我的应用程序绝对不是为“横向”模式设计的。
在阅读了一些论坛后,我在我的清单文件中添加了这些行:
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:screenOrientation="portrait">
但它不能在我的设备(HTC Desire)上使用。它从“纵向”切换到“横向”,忽略清单文件中的行。
在更多的论坛阅读后,我试图在我的清单文件中添加以下内容:
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:configChanges="orientation"
android:screenOrientation="portrait">
这个函数在activity类中
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
但是,还是不走运。
如果您希望在调试和发布版本中支持不同的方向,请这样写(参见https://developer.android.com/studio/build/gradle-tips#share-properties-with-the-manifest)。
在构建。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
android:name=".LoginActivity"
android:screenOrientation="${orientation}" />
你可以添加android:configChanges:
manifest占位符= [configChanges: "", orientation: "fullSensor"] in debug and manifest占位符= [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"] in release,
<activity
android:name=".LoginActivity"
android:configChanges="${configChanges}"
android:screenOrientation="${orientation}" />
如果你有很多像我这样的活动,在你的应用程序中,或者如果你不想在manifest中为每个活动标签输入代码,你可以这样做。
在你的Application Base类中,你会得到一个生命周期回调
基本上,在每个活动中,当在应用程序类中创建时发生的事情是在这里被触发的代码。
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) {
}
});
}
我希望这能有所帮助。
根据Android的文档,你也应该经常包括screenSize作为可能的配置更改。
android:configChanges="orientation|screenSize"
如果应用程序的目标是API级别13或更高(由
minSdkVersion和targetSdkVersion属性),那么您也应该
声明"screenSize"配置,因为当a
设备在纵向和横向方向之间切换。
此外,如果你都包括值keyboardHidden在你的例子,你不应该也考虑locale, mcc, fontScale,键盘和其他?