更改屏幕方向时活动结束

时间:2015-08-01 17:37:09

标签: android android-activity orientation-changes

我已经搜索了这个问题的解决方案但没有找到任何东西。问题是我创建了一个活动,我希望这可以在用户显示对话框时更改屏幕的方向。活动已从纵向方向开始,该方向在 AndroidManifest.xml 中定义为在用户旋转屏幕时无法更改,它仅在用户按下按钮时更改方向以显示对话框。但是当这种情况发生时,活动会改变方向,但一旦改变它就会关闭。我检查了logcat,但没有抛出任何异常。

这样我就在 AndroidManifest.xml 中定义了我的活动:

    <activity
        android:name=".ui.BarCodeActivity"
        android:label="@string/title_activity_barcode"
        android:screenOrientation="portrait" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".ui.MainActivity" />
    </activity>

这是我用来改变当时屏幕方向的代码:

@Override
protected void onSaveInstanceState(Bundle state) {
    super.onSaveInstanceState(state);
    Log.e(TAG, "onSave startDialog: " + startDialog);
    state.putBoolean("startDialog", startDialog);
}

@Override
protected void onRestoreInstanceState(@NonNull Bundle state) {
    startDialog = state.getBoolean("startDialog", false);
    Log.e(TAG, "onRestore startDialog: " + startDialog);
    if (startDialog) {
        showDialog();
    }
}

private void showDialog() {
    Log.e(TAG, "creating dialog");
    Dialog barcodeDialog = new Dialog(BarCodeActivity.this);
    barcodeDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialogInterface) {
            dialogInterface.dismiss();
            startDialog = false;
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });

    barcodeDialog.setContentView(R.layout.code_dialog);
    barcodeDialog.setTitle("Scan barcode");
    ImageView barcode = (ImageView) barcodeDialog.findViewById(R.id.dialog_barcode);
    barcode.setImageDrawable(barcodeDrawable);
    TextView codeView = (TextView) barcodeDialog.findViewById(R.id.dialog_code);

    codeView.setText(code);
    /*barcodeDialog.show();*/
}

当活动再次开始然后关闭时,我已经看到在logcat输出奇怪,如果不是你会有东西看,我一直在研究,但我没有运气解决方案。这是输出:

08-01 19:21:21.600  31521-31521/com.my.app W/ResourceType﹕ Failure getting entry for 0x7f090058 (t=8 e=88) in package 0 (error -75)
08-01 19:21:21.600  31521-31521/com.my.app W/ResourceType﹕ Failure getting entry for 0x7f090058 (t=8 e=88) in package 0 (error -75)
08-01 19:21:21.610  31521-31521/com.my.app D/not﹕ got -1
08-01 19:21:21.610  31521-31521/com.my.app D/not﹕ got -1
08-01 19:21:21.620  31521-31521/com.my.app D/not﹕ got -1
08-01 19:21:21.630  31521-31521/com.my.app D/not﹕ got -1

错误是什么?

如果有帮助我将Android Studio更新为1.3版本。

2 个答案:

答案 0 :(得分:0)

尝试更改

win32com.dll

        <activity
          android:name=".ui.BarCodeActivity"
          android:label="@string/title_activity_barcode"
          android:screenOrientation="portrait">
           <meta-data
           android:name="android.support.PARENT_ACTIVITY"
           android:value=".ui.MainActivity" />
        </activity>

并在您的活动中使用此代码进行测试。

        <activity
          android:name=".ui.BarCodeActivity"
          android:label="@string/title_activity_barcode"
          android:screenOrientation="portrait" 
          android:configChanges="keyboardHidden|orientation">
           <meta-data
           android:name="android.support.PARENT_ACTIVITY"
           android:value=".ui.MainActivity" />
        </activity>

}

答案 1 :(得分:0)

我知道这已经过时但是当你使用configChanges时,如果你支持所有版本的android else take a look at this documentation,你必须定义如下所示的orientation和screensize。

因此,更改 android:configChanges =&#34; keyboardHidden | orientation&#34;

<强>机器人:configChanges =&#34;取向|屏幕尺寸| keyboardHidden&#34;

它应该有效,因为我们在我们的应用程序中使用它。

希望,这有助于某人。