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的一些理解
Android:DialogFragment.dismissInternal 处 DialogFragment.dismissAllow 处的 NullPointerException