我想知道当方向改变时如何防止应用重新加载?
我有一个小型测试应用程序,它将播放音频声音,直到按下停止按钮。如果我将Android或模拟器从水平更改为纵向,则停止按钮不起作用。第二次出现的应用程序已加载。无论方向是否已更改,我希望第一次出现以继续运行。
main.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>
Test.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();
}
} );
}
}
答案 0 :(得分:2)
我添加到清单中: 机器人:screenOrientation = “风景” 机器人:configChanges = “keyboardHidden |取向”
以及Activity Java文件。
@Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
布局保持在横向状态,方向的旋转不会影响应用程序的播放。
答案 1 :(得分:1)
这是因为您的活动在方向更改期间被破坏并重新启动(在Android-land中也称为配置更改)。
在AndroidManifest.xml文件中,将以下内容添加到您的活动声明中:
android:configChanges="orientation"
所以它看起来如下:
<activity android:name="com.your.package.TestAppActivity"
android:configChanges="orientation"
/>
然后,您的活动可以收听配置更改并手动响应。更改方向将不再自动重新启动活动。
答案 2 :(得分:1)
我仍然没有得到我想要的结果,当我旋转设备时内容仍然有所改变(仍然调用 onCreate()
方法)。
我给出空配置对象
新配置()而不是提供的参数 newConfig
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(new Configuration());
}
希望这有助于任何想要完全忽视方向变化事件的人
答案 3 :(得分:0)
这是Android Activity的设计方式。如果方向发生变化,它将重新加载新活动。要么禁用方向,要么将应用程序划分为2层(前端和后端)。前端将显示进度和控制按钮,后端将从前端执行命令并执行。在此模型中,您将不会遇到您现在面临的问题。
看看这个link它可能对你有帮助。
答案 4 :(得分:0)
看一下这篇文章:Handling Runtime Changes
我认为更好地处理更改,但您仍然可以选择阻止更改,如“b。自行处理配置更改”中所述。
答案 5 :(得分:0)
在清单中,在你的标签中,输入android:screenOrientation =“portrait”
http://developer.android.com/guide/topics/manifest/activity-element.html