eclipse 方向改变时重新启动android活动

bvuwiixz  于 2023-03-29  发布在  Eclipse
关注(0)|答案(6)|浏览(127)

我读了很多关于这个问题的帖子,比如[这个链接][1],一个解决方案是添加方向configChanges来显示和处理onConfigurationChanged事件,以防止onCreate活动在旋转时再次被调用。我这样做了,事件被正确触发,然而,在此执行之后,onCreate方法也被执行!为什么?我错过了什么?谢谢
显然,

<activity 
            android:name="webPush"
            android:configChanges="keyboardHidden|orientation"/>

活性,

@Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.vistaaib);
    }

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vistaaib);
...
yzuktlbb

yzuktlbb1#

参见http://web.archive.org/web/20120130201824/https://developer.android.com/guide/topics/resources/runtime-changes.html-

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

从Android 3.2(API级别13)开始,当设备在纵向和横向方向之间切换时,“屏幕大小”也会发生变化。因此,如果您想在开发API级别13或更高版本时防止运行时因方向更改而重新启动,则必须用途:

android:configChanges="orientation|screenSize"
doinxwow

doinxwow2#

我做了这个。我把这个代码添加到清单,它工作得很好。

<activity
        android:name="?"
        android:label="@string/?"
        android:theme="@style/?" 
        android:configChanges="orientation|screenSize">

如果您想在设备旋转时更改某些内容,则需要在Activity下添加此内容。

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
xwbd5t1u

xwbd5t1u3#

在该Activity的清单文件中编写这两行代码。
看起来这会解决你的问题。<activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

fwzugrvs

fwzugrvs4#

您的Activity将在任何配置更改时重新启动。很可能是因为键盘状态更改而重新启动。请尝试将以下内容添加到Activity的属性中:

android:configChanges="orientation|keyboard|keyboardHidden"
idfiyjo8

idfiyjo85#

如果您正在为API级别12或更低级别工作
在menifest文件中,在声明活动名称后添加以下内容。

android:configChanges="orientation"

例如:

<activity
        android:name=".NameOfYourActivity"
        android:configChanges="orientation"/>

在android 3.2(API级别13)或更高版本中,屏幕大小也会随旋转变化而变化,因此也要声明这一点。
为此,

android:configChanges="orientation|screenSize"
yacmzcpb

yacmzcpb6#

以下可能是原因
事件:screenSize
当前可用的屏幕大小已更改。这表示当前可用大小相对于当前宽高比的更改,因此当用户在横向和纵向之间切换时也会更改。但是,如果您的应用程序针对API级别12或更低级别,则您的Activity始终会自行处理此配置更改(此配置更改不会重新启动您的Activity,即使在Android 3.2或更高版本的设备上运行也是如此)。
因此沿着除了“orientation”之外,还要加上“screenSize

相关问题