14

ユーザーがすべての登録の詳細を入力する登録画面があり、ユーザーが[登録]ボタンをクリックすると、プログレスバーが表示され(プログレスバーが回転し始めます)、ユーザーをホーム画面に移動します。ユーザーが回転した場合プログレスバーが回転しているときに電話をかけると、プログレスバーが閉じます。プログレスバーが表示されている(回転している)ときに、向きがポトレイトからランドスケープに、またはその逆に変化しないようにしたいです。プログレスバーが回転しているときに方向の変化を停止する方法回転していますか?助けていただければ幸いです。

4

3 に答える 3

14

これは、画面の向きが回転するとアクティビティが再開されるために発生します。この場合configChanges、AndroidManifestファイルのタグに属性を追加して、アクティビティの再作成を停止できます。

<activity android:name=".Activity_name"
          android:configChanges="orientation|keyboardHidden">

これにより、プログレスバーが機能し、向きが変わっても停止しなくなり、向きが変わる可能性があります。

アップデート

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
            setContentView(R.layout.login_landscape);
        }
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.login);         
        }
    }
于 2011-10-13T05:11:47.403 に答える
9

ここで説明 するように、

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

その後

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

本当に魅力のように機能します...実際のデバイスで!

エミュレーターでテストするときに壊れているとは思わないでください。ctrl+F11ショートカットは、センサーの動きをエミュレートせずに、常に画面の向きを変更します。

他のいくつかの参考文献:

  1. Androidで画面の回転をプログラムで有効/無効にする
  2. Androidの子アクティビティとオリエンテーションロック

そしてここにActivityinfoがあります

*****************編集済み********************************

また、画面の回転でプログレスバーを処理できないと思います。私は正しいですか?

したがって、このソリューションではローテーションを停止する必要はありません。プログレスバーを処理する必要があります。この目的に役立ついくつかのチュートリアルがあります。

  1. 進行状況ダイアログとバックグラウンドスレッドがアクティブなときに画面の向きの変更を処理するにはどうすればよいですか?
  2. 進行状況ダイアログと向きの変更の処理
  3. Android画面の向きの回転におけるスレッドと進行状況ダイアログ
  4. AndroidPersistentProgressDialogが正しく実行されました

**************編集済み2*****************

また、向きが変わるとデータが失われることがあります。したがって、これらのチュートリアルを試すことができます

  1. 実行時の変更の処理
  2. 画面の向きをすばやく変更
  3. Androidでの向きの変更の処理
于 2011-10-13T05:53:16.847 に答える
2

ActivityクラスでsetRequestOrientationメソッドを使用します。

ProgressDialogクラスを継承し、メソッドをオーバーライドします。
サンプルコードは以下のとおりです。

    class myDialog extends ProgressDialog
{
    Activity mActivity;
    public myDialog(Activity context) {
        super(context);
        this.mActivity = context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
    }

    @Override
    public void dismiss() {            
        super.dismiss();
        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }
}
于 2011-10-13T06:31:47.347 に答える