我有一个应用程序,我想在纵向模式下使用,所以我已经定义了 android:screenOrientation=“portrait”在manifest XML中。这适用于HTC Magic手机(并防止方向变化的其他手机以及)。
但当我打开硬件QWERTY键盘(不是虚拟键盘)时,HTC G1手机遇到了一个问题。我的活动保持在肖像模式,但它似乎重新启动,失去了所有的状态。HTC Hero版本不会出现这种情况。
我的应用程序相当大,所以我不希望它在打开键盘时重新启动并失去所有状态。我该如何预防呢?
我有一个应用程序,我想在纵向模式下使用,所以我已经定义了 android:screenOrientation=“portrait”在manifest XML中。这适用于HTC Magic手机(并防止方向变化的其他手机以及)。
但当我打开硬件QWERTY键盘(不是虚拟键盘)时,HTC G1手机遇到了一个问题。我的活动保持在肖像模式,但它似乎重新启动,失去了所有的状态。HTC Hero版本不会出现这种情况。
我的应用程序相当大,所以我不希望它在打开键盘时重新启动并失去所有状态。我该如何预防呢?
当前回答
我一直觉得你两者都需要
android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"
其他回答
你需要修改AndroidManifest.xml的intrations(先前Ashton)提到,并确保活动处理onConfigurationChanged事件,因为你想要它处理。它应该是这样的:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
我一直觉得你两者都需要
android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"
使用这个. .
android:screenOrientation="portrait"
在Visual Studio Xamarin中:
添加:
使用Android.Content.PM;到您的活动名称空间列表。
添加:
[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
作为你类的属性,像这样:
[Activity(ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : Activity
{...}
如果你想在你的应用程序中的所有活动都只使用纵向模式,你可以简单地在应用程序类中使用如下所示。
class YourApplicationName : Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityStarted(activity: Activity) {
}
override fun onActivityResumed(activity: Activity) {
}
override fun onActivityPaused(activity: Activity) {
}
override fun onActivityStopped(activity: Activity) {
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
}
override fun onActivityDestroyed(activity: Activity) {
}
})
}
}