On Sunday, August 21, 2016 at 10:02:11 PM UTC+3, AndroidUser253 wrote:
>
> I have an example code that creates WebView for HTML5 video and it allows
> to enable fullscreen (actually there is also a problem with hiding status
> bar, but it's not the main problem now).
>
> public class MainActivity extends AppCompatActivity {
>
> private MyWebChromeClient mWebChromeClient = null;
> private View mCustomView;
> private LinearLayout mContentView;
> private FrameLayout mCustomViewContainer;
> private WebChromeClient.CustomViewCallback mCustomViewCallback;
> private Bundle webViewBundle;
> private WebView mWebView;
> private int viewWidth;
> private int viewHeight;
> private LinearLayout.LayoutParams layoutParams;
> private View decorView;
>
> @Override
> protected void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
> setContentView(R.layout.activity_main);
> decorView = getWindow().getDecorView();
>
> mWebView = (WebView) findViewById(R.id.webView);
> mWebChromeClient = new MyWebChromeClient();
> mWebView.setWebChromeClient(mWebChromeClient);
> mWebView.setWebViewClient(new WebViewClient(){
> @Override
> public boolean shouldOverrideUrlLoading(WebView view, String url)
> {
> return false;
> }
> });
> WebSettings webSettings = mWebView.getSettings();
> webSettings.setJavaScriptEnabled(true);
>
> viewWidth = 480;
> viewHeight = (int) (((double) viewWidth) * 0.5625); // video aspect
> 16:9
> layoutParams = new LinearLayout.LayoutParams(viewWidth, viewHeight);
> mWebView.setLayoutParams(layoutParams);
>
> if (webViewBundle != null) {
> mWebView.restoreState(webViewBundle);
> } else {
> mWebView.loadUrl(%VIDEO_URL%); // e.g, page with iframe video
> }
>
> }
>
> @Override
> public void onPause() {
> super.onPause();
> webViewBundle = new Bundle();
> mWebView.saveState(webViewBundle);
> mWebView.onPause();
> }
>
> @Override
> public void onResume() {
> super.onResume();
> mWebView.onResume();
> }
>
> @Override
> public void onDestroy() {
> super.onDestroy();
> mWebView.destroy();
> }
>
> public class MyWebChromeClient extends WebChromeClient {
>
> FrameLayout.LayoutParams LayoutParameters = new
> FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
> FrameLayout.LayoutParams.MATCH_PARENT);
>
> @Override
> public void onShowCustomView(View view, CustomViewCallback callback) {
> // if a view already exists then immediately terminate the new one
> if (mCustomView != null) {
> callback.onCustomViewHidden();
> return;
> }
> mContentView = (LinearLayout) findViewById(R.id.activity_main);
> mContentView.setVisibility(View.GONE);
> mCustomViewContainer = new FrameLayout(MainActivity.this);
> mCustomViewContainer.setLayoutParams(LayoutParameters);
> mCustomViewContainer.setBackgroundResource(android.R.color.black);
> view.setLayoutParams(LayoutParameters);
> mCustomViewContainer.addView(view);
> mCustomView = view;
> mCustomViewCallback = callback;
> getSupportActionBar().hide();
> int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
> decorView.setSystemUiVisibility(uiOptions);
> mCustomViewContainer.setVisibility(View.VISIBLE);
> setContentView(mCustomViewContainer);
> }
>
> @Override
> public void onHideCustomView() {
> if (mCustomView == null) {
> return;
> } else {
> // Hide the custom view.
> mCustomView.setVisibility(View.GONE);
> // Remove the custom view from its container.
> mCustomViewContainer.removeView(mCustomView);
> mCustomView = null;
> mCustomViewContainer.setVisibility(View.GONE);
> mCustomViewCallback.onCustomViewHidden();
> // Show the content view.
> int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
> decorView.setSystemUiVisibility(uiOptions);
> getSupportActionBar().show();
> mContentView.setVisibility(View.VISIBLE);
> setContentView(mContentView);
> }
> }
> }
> @Override
> public void onBackPressed() {
> if (mCustomViewContainer != null)
> mWebChromeClient.onHideCustomView();
> else if (mWebView.canGoBack())
> mWebView.goBack();
> else
> super.onBackPressed();
> }}
>
> This code for the activity. But I want to use it in fragments (because
> they have a power and I can use them for ViewPager). I could not find any
> example with overriding `onShowCustomView, onHideCustomView, onBackPressed'
> in fragments.
>
> Here what I did for a fragment
>
> public class TestFragment extends Fragment {
>
> private static final String SOME_ID = "blabla";
>
> private int viewWidth;
> private int viewHeight;
> private View v;
> private LinearLayout.LayoutParams layoutParams;
> private Episode mEpisode;
> private WebView mWebView;
> private Bundle webViewBundle;
> private MyWebChromeClient mWebChromeClient = null;
> private View mCustomView;
> private FrameLayout mCustomViewContainer;
> private WebChromeClient.CustomViewCallback mCustomViewCallback;
> private View decorView;
>
> public static TestFragment newInstance(UUID blabla) {
> Bundle args = new Bundle();
> args.putSerializable(SOME_ID, blabla);
> TestFragment fragment = new TestFragment();
> fragment.setArguments(args);
> return fragment;
> }
>
> @Override
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
> setRetainInstance(true);
> }
>
> @Override
> public View onCreateView(LayoutInflater inflater, ViewGroup container,
> Bundle savedInstanceState) {
> v = inflater.inflate(R.layout.fragment_episode, container, false);
>
> decorView = getActivity().getWindow().getDecorView();
> mWebView = (WebView) v.findViewById(R.id.webView);
> mWebChromeClient = new MyWebChromeClient();
> mWebView.setWebChromeClient(mWebChromeClient);
> mWebView.setWebViewClient(new WebViewClient(){
> @Override
> public boolean shouldOverrideUrlLoading(WebView view, String url)
> {
> return false;
> }
> });
> WebSettings webSettings = mWebView.getSettings();
> webSettings.setJavaScriptEnabled(true);
>
> viewWidth = 400;
> viewHeight = (int) (((double) viewWidth) * 0.5625); // webview size
> for 16:9 videos
> mWebView.setLayoutParams(new LinearLayout.LayoutParams(viewWidth,
> viewHeight));
> if (webViewBundle != null) {
> mWebView.restoreState(webViewBundle);
> } else {
> mWebView.loadUrl(%VIDEO_URL%); // e.g, page with iframe video
> }
>
> return v;
> }
>
> @Override
> public void onPause() {
> super.onPause();
> webViewBundle = new Bundle();
> mWebView.saveState(webViewBundle);
> mWebView.onPause();
> }
>
> @Override
> public void onResume() {
> super.onResume();
> mWebView.onResume();
> }
>
> @Override
> public void onDestroy() {
> super.onDestroy();
> mWebView.destroy();
> }
>
> public class MyWebChromeClient extends WebChromeClient {
> FrameLayout.LayoutParams LayoutParameters = new
> FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
> FrameLayout.LayoutParams.MATCH_PARENT);
>
> @Override
> public void onShowCustomView(View view, CustomViewCallback callback) {
> // if a view already exists then immediately terminate the new one
> if (mCustomView != null || v == null) {
> callback.onCustomViewHidden();
> return;
> }
> v.setVisibility(View.GONE);
> mCustomViewContainer = new FrameLayout(getActivity());
> mCustomViewContainer.setLayoutParams(LayoutParameters);
> mCustomViewContainer.setBackgroundResource(android.R.color.black);
> view.setLayoutParams(LayoutParameters);
> mCustomViewContainer.addView(view);
> mCustomView = view;
> mCustomViewCallback = callback;
> ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
> int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
> decorView.setSystemUiVisibility(uiOptions);
> mCustomViewContainer.setVisibility(View.VISIBLE);
> getActivity().setContentView(mCustomViewContainer);
> }
>
> @Override
> public void onHideCustomView() {
> if (mCustomView != null && v != null) {
> // Hide the custom view.
> mCustomView.setVisibility(View.GONE);
> // Remove the custom view from its container.
> mCustomViewContainer.removeView(mCustomView);
> mCustomView = null;
> mCustomViewContainer.setVisibility(View.GONE);
> mCustomViewCallback.onCustomViewHidden();
> // Show the content view.
> int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
> decorView.setSystemUiVisibility(uiOptions);
>
> ((AppCompatActivity)getActivity()).getSupportActionBar().show();
> v.setVisibility(View.VISIBLE);
> getActivity().setContentView(v);
> }
> }
> }}
>
> I can go to fullscreen using this code (onShowCustomView works good), but
> I can't get out of fullscreen - the app just crashes if I press back button.
>
Also I can't override onBackPressed in fragments (or mb it's no important,
because onHideCustomView is being calling anyway when I press back button
@Override
> public void onBackPressed() {
> if (mCustomViewContainer != null)
> mWebChromeClient.onHideCustomView();
> else if (mWebView.canGoBack())
> mWebView.goBack();
> else
> super.onBackPressed();
> }
>
> Any ideas?
>
--
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/android-developers/a68d0bd4-fdfb-4c7a-8646-2d55aa19e30f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.