0

我想知道当方向改变时如何防止应用重新加载?

我有一个小型测试应用程序,它会播放音频声音,直到按下停止按钮。如果我将我的 Android 或模拟器从水平更改为纵向,则停止按钮不起作用。加载应用程序的第二次出现。无论方向是否已更改,我都希望第一次出现继续运行。

主.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent" android:orientation="horizontal">


<LinearLayout

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_weight="0.64" android:orientation="horizontal">


<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Play" />


<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Stop" />


</LinearLayout>


</LinearLayout>

测试.java

import android.app.Activity;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;


public class TestAppActivity extends Activity {

private Button btnDisplay;

private MediaPlayer mediaPlayer;


@Override

public void onCreate(Bundle savedInstanceState) 

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setVolumeControlStream(AudioManager.STREAM_MUSIC);

mediaPlayer = MediaPlayer.create(this, R.raw.nut);

mediaPlayer.setLooping(true);


((Button)findViewById(R.id.button1)).setOnClickListener( new View.OnClickListener() {


public void onClick(View v) {

mediaPlayer = MediaPlayer.create(LoopBugActivity.this, R.raw.nut);

mediaPlayer.setLooping(true);

mediaPlayer.start(); 

}

} );



((Button)findViewById(R.id.button2)).setOnClickListener( new View.OnClickListener() {


public void onClick(View v) {

mediaPlayer.stop();

}

} );

}

}
4

6 回答 6

2

我添加到清单: android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"

以及 Activity Java 文件。

@Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);     
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 

布局保持横向,方向的旋转不会影响应用程序的播放。

于 2012-05-02T02:40:43.363 回答
1

发生这种情况是因为您的活动在方向更改期间被破坏并重新启动(在 Android 领域也称为配置更改)。

在您的 AndroidManifest.xml 文件中,将以下内容添加到您的活动声明中:

android:configChanges="orientation"

所以它看起来像下面这样:

        <activity android:name="com.your.package.TestAppActivity"
        android:configChanges="orientation"
    />

然后,您的活动可以监听配置更改并手动响应。更改方向将不再自动重新启动活动。

于 2012-04-27T00:16:09.393 回答
1

我仍然没有得到我想要的结果,当我旋转设备时内容仍然发生变化(onCreate()仍然调用该方法)。我给一个的配置对象时达到的实际效果

new Configuration()而不是提供的参数newConfig

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(new Configuration());
}

希望这对想要完全忽略方向变化事件的人有所帮助

于 2013-03-28T22:29:46.180 回答
0

这就是 Android Activity 的设计方式。如果方向发生变化,它将重新加载新活动。要么禁用方向,要么将应用程序分为 2 层(前端和后端)。前端将仅显示进度和控制按钮,后端将从前端获取命令并执行。在此模型中,您将不会遇到现在面临的问题。

看看这个链接它可能对你有帮助。

于 2012-04-27T00:15:49.003 回答
0

看看这篇文章:处理运行时更改

我认为最好处理更改,但您仍然可以选择阻止它,如“b. 自己处理配置更改”中所述。

于 2012-04-27T00:16:35.430 回答
0

在清单中,在您的标签中,输入 android:screenOrientation="portrait"

http://developer.android.com/guide/topics/manifest/activity-element.html

于 2012-04-27T00:18:02.713 回答