4 回答
TA贡献1842条经验 获得超21个赞
Android 3.2及更高版本的更新:
注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会更改。因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则必须在
"screenSize"
值之外包含该"orientation"
值。也就是说,你必须申报android:configChanges="orientation|screenSize"
。但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动)。
TA贡献1829条经验 获得超7个赞
onCreate()
可以尝试检查Bundle
savedInstanceState
传入事件以查看它是否为空,而不是试图完全阻止被解雇。
例如,如果我有一些逻辑应该在Activity
真正创建时运行,而不是在每次方向更改时运行,我只在onCreate()
该savedInstanceState
值为null 时才运行该逻辑。
否则,我仍然希望布局正确地重新绘制方向。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game_list); if(savedInstanceState == null){ setupCloudMessaging(); }}
不确定这是否是最终的答案,但它对我有用。
TA贡献1946条经验 获得超4个赞
我做了什么...
在清单中,到活动部分,添加:
android:configChanges="keyboardHidden|orientation"
在活动的代码中,实现了:
//used in onCreate() and onConfigurationChanged() to set up the UI elements
public void InitializeUI()
{
//get views from ID's
this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage);
//etc... hook up click listeners, whatever you need from the Views
}
//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InitializeUI();
}
//this is called when the screen rotates.
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
InitializeUI();
}
添加回答
举报