surfaceCreated从未在活动主题=主题.Dialog时调用



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

<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();
}

我的问题是"surfaceCreated"方法从未调用过。

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

有人熟悉这个问题吗?

谢谢你的帮助。

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

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

最新更新