0

向きが変わったときにアプリがリロードしないようにする方法を知りたいですか?

停止ボタンが押されるまでオーディオサウンドを再生する小さなテストアプリがあります。Android またはシミュレーターを横から縦に変更すると、停止ボタンが機能しません。2 回目のアプリが読み込まれます。向きが変更されたかどうかに関係なく、最初のオカレンスを実行し続けたいです。

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>

テスト.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()メソッドはまだ呼び出されていました)。空の構成オブジェクトを指定したときに達成した実際の効果

提供されたパラメーターnewConfigの代わりにnew Configuration()

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

これが、方向変更イベントを完全に無視したい人に役立つことを願っています

于 2013-03-28T22:29:46.180 に答える
0

これが Android アクティビティの設計方法です。向きが変わると、新しいアクティビティがリロードされます。向きを無効にするか、アプリケーションを 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 に答える