在Android中忽略方向更改

时间:2012-04-27 00:02:14

标签: android android-layout

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

我有一个小型测试应用程序,它将播放音频声音,直到按下停止按钮。如果我将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();

}

} );

}

}

6 个答案:

答案 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