android - Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作
问题描述
我正在工作应用程序。当按钮单击发生时,它会显示带有视频视图的弹出窗口。它显示在 android 29 api 中,但不在 android 24 api 中。以下是它的 showvideopopup 函数代码。
private void showVideoPopup()
{
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = layoutInflater.inflate(R.layout.dispensing_intro,null);
int uiOptions =View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
customView.setSystemUiVisibility(uiOptions);
// closePopupBtn = (Button) customView.findViewById(R.id.closeView);
//instantiate popup window
dispense_intro_popup = new PopupWindow(customView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//display the popup window
dispense_intro_popup.showAtLocation(dispense_intro_view, Gravity.CENTER, 0, 0);
VideoView video = (VideoView) customView.findViewById(R.id.dispense_intro);
Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
video.setVideoURI(videoUri);
video.start();
video.setOnCompletionListener(this);
}
以下是popup.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#b3000000"
android:layout_height="700dp"
android:id="@+id/dispense_intro_holder"
android:layout_gravity="center"
android:gravity="center">
<VideoView
android:id="@+id/dispense_intro"
android:layout_gravity="center"
android:layout_width="640dp"
android:layout_height="360dp" />
</LinearLayout>
解决方案
使用DialogFragment()
而不是PopupWindow
.
然后将以下代码添加到片段中onCreateView
弹出片段.java
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.popup, container, false);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FullscreenTheme);
VideoView video = (VideoView) rootView.findViewById(R.id.dispense_intro);
Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
video.setVideoURI(videoUri);
video.start();
video.setOnCompletionListener(this);
return rootView;
}
并使对话框片段全屏使用以下代码onDialogCreated
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
return dialog;
}
推荐阅读
- .htaccess - .htaccess - 我可以重定向除一个 pdf 文件之外的所有内容,所有重定向都转到同一个 PDF
- sql - 如何为 Bartender 中的每个记录行选择自定义数量?
- angular - 离开页面Angular时使用sessionStorage将值保留在选择值中
- c++ - Qt 中的 iOS 通知
- powershell - Azure devops - 更新 json 文件 - powershell 脚本
- c++ - 有没有办法在 C++ 中初始化这样的 3D 数组?
- c - 为什么 getpwnam 返回的结构的 pw_passwd 字段不包含我的密码哈希?
- c# - 使用一个脚本获得 3 个不同的值
- c# - 如何禁用特定行并防止在 Xamarin 数据网格中单击?
- reactjs - React Grid 上的弹出图像