当活动主题= Theme.Dialog时,surfaceCreated从不调用

时间:2014-09-17 06:28:18

标签: surfaceview android-dialog

我有一个对话框活动,这是我在清单文件中配置它的方式:

<activity
    android:name=".VideoDialogPreviewAct"
    android:configChanges="orientation"
    android:label="@string/title_activity_video_dialog_preview"
    android:parentActivityName=".VideoResultsScreenAct"
    android:theme="@android:style/Theme.Dialog" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.MES.MySperm.VideoResultsScreenAct" />
</activity>

在活动中我只有一个SurfaceView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    tools:context=".VideoDialogPreviewAct">

    <SurfaceView
        android:id="@+id/MainSurface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

我想用这个表面播放视频, 这是我的主要Java代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    setContentView(R.layout.activity_video_dialog_preview);
    overridePendingTransition(0, 0);

    mPreview = (SurfaceView) findViewById(R.id.MainSurface);
    mPreview.setOnTouchListener(onTouchListner);
    mPreview.setZOrderOnTop(true);  
    Create_Surface();
}

private void Create_Surface()
{

      holder = mPreview.getHolder();
      holder.addCallback(this);
      holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      holder.setFixedSize(getWindow().getWindowManager().getDefaultDisplay().getWidth(), 0);
      //holder.setFixedSize(100, 100);
      mMediaPlayer = new MediaPlayer();

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
     Play_Video();

}

我的问题是&#34; surfaceCreated&#34;从未调用的方法。

如果我将活动样式更改为全屏模式,那么一切正常。

有人熟悉这个问题吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题。对我来说,这是因为视图大小设置为0,因此从未创建表面。我通过设置一个特定的大小来检查这一点,并且突然调用了回调。 (如果View在屏幕外布局,显然也是如此。)

因此,您的主题中可能存在影响视图大小或位置的内容,导致其无法显示。