DialogFragment 内的 VideoView

Posted

技术标签:

【中文标题】DialogFragment 内的 VideoView【英文标题】:VideoView inside DialogFragment 【发布时间】:2013-01-25 13:08:16 【问题描述】:

我刚刚创建了一个包含 VideoView 的自定义 DialogFragment,但遇到了一些问题。

视频正在播放,但出于某种奇怪的原因,视频顶部有一种黑色且非常透明的层。当然,我尝试从我的应用程序中的其他地方(不是对话窗口)播放相同的视频,并且它显示正确。很奇怪……

此外,对话框窗口的顶部和左侧边框会消失 - 如果移除 VideoView,它们也不会消失。

有什么想法吗?提前致谢!

编辑

控制器

public class VideoPlayerFragment extends DialogFragment

    String json_string;

    // Constructor
    public static VideoPlayerFragment newInstance(String json_string_arg)
    
        VideoPlayerFragment fragment = new VideoPlayerFragment();

        Bundle arguments = new Bundle();
        arguments.putString("json_string", json_string_arg);
        fragment.setArguments(arguments);

        return fragment;
    


    @Override
    public void onCreate(Bundle savedInstanceState)
    
        super.onCreate(savedInstanceState);

        // Set style
        setStyle(DialogFragment.STYLE_NO_TITLE, 0);
    


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    
        View view = inflater.inflate(R.layout.video_player, container, false);

        return view;
    


    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    
         super.onActivityCreated(savedInstanceState);

         // Set video holder
         VideoView video_view = (VideoView) getView().findViewById(R.id.video_view);

         // Set URL
         Uri video = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test);
         video_view.setVideoURI(video);

         // Start video
         video_view.start();
    

查看

    <LinearLayout android:id="@+id/video"
        android:layout_
        android:layout_
        android:padding="@dimen/video_player_margin"
        android:orientation="vertical" >

        <VideoView android:id="@+id/video_view"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_
            android:layout_ />

    </LinearLayout>

【问题讨论】:

把你的对话框片段代码,让我们看看什么是prob 我实在找不到解决办法。请帮帮我!!!! 【参考方案1】:
     public class VideoPlayerFragment extends DialogFragment
        
            String json_string;

            // Constructor
            public static VideoPlayerFragment newInstance(String json_string_arg)
            
                VideoPlayerFragment fragment = new VideoPlayerFragment();

                Bundle arguments = new Bundle();
                arguments.putString("json_string", json_string_arg);
                fragment.setArguments(arguments);

                return fragment;
            

        @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) 
                Dialog dialog = new Dialog(getActivity());
                dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
                dialog.getWindow().setSoftInputMode(
                        WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN|WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
                dialog.setCancelable(true);
                View parent= getActivity().getLayoutInflater().inflate(R.layout.video_player, null);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
dialog.setContentView(parent, layoutParams);
                return dialog;
            
         @Override
            public void onActivityCreated(Bundle savedInstanceState)
            
                 super.onActivityCreated(savedInstanceState);

                 // Set video holder
                 VideoView video_view = (VideoView) getView().findViewById(R.id.video_view);

                 // Set URL
                 Uri video = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test);
                 video_view.setVideoURI(video);

                 // Start video
                 video_view.start();
            

朋友试试上面的代码。尝试创建不带对话框标题的onCreateDialog而不是创建视图....

【讨论】:

【参考方案2】:

我遇到了同样的情况:DialogFragment中的videoview。

问题 1:here 可能对你有帮助,我也找到了;

问题 2:我认为您在方法 onActivityCreated() 中需要这些代码(这条线隐藏了黑色边框)

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

ps:这是我在 onCreateView(,,) 中的初始化代码

if (getShowsDialog())
    
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        getDialog().setCanceledOnTouchOutside(false);
    

【讨论】:

以上是关于DialogFragment 内的 VideoView的主要内容,如果未能解决你的问题,请参考以下文章

DialogFragment: DialogFragment的一些理解

Activity与DialogFragment交互的方法

Dialogfragment 未清除

Android:DialogFragment.dismissInternal 处 DialogFragment.dismissAllow 处的 NullPointerException

DialogFragment.getDialog 返回 null

为啥要使用 DialogFragment?