【问题标题】:Android Youtube Webview Full screen back press exit the appAndroid Youtube Webview 全屏后按退出应用
【发布时间】:2020-03-29 04:28:48
【问题描述】:

Youtube 全屏工作正常,但是当我按下返回按钮时,应用程序会自动退出。我想要那个,当我从全屏视频模式按下后退按钮时,我想返回上一页。这是我的代码:

package com.example.youtubewebview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webView=findViewById(R.id.webView);
        final FrameLayout frameLayout=findViewById(R.id.myFrame);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());

        webView.loadUrl("https://www.youtube.com/channel/UCCjv5s3o3IuKPH0KycfyWHg");

        webView.setWebChromeClient(new WebChromeClient() {
            public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
                super.onShowCustomView(view,callback);
                webView.setVisibility(View.GONE);
                frameLayout.setVisibility(View.VISIBLE);
                frameLayout.addView(view);

            }
            public void onHideCustomView () {
                super.onHideCustomView();
                webView.setVisibility(View.VISIBLE);
                frameLayout.setVisibility(View.GONE);
            }
        });
    }
}

【问题讨论】:

    标签: android webview


    【解决方案1】:

    您可以覆盖 onbackpressed 并手动处理它

        @Override
    public void onBackPressed() {
    // write your logic here to trigger backpressed menually if you want to enable for somecondition
        return;
    }
    

    如果您想在 web 视图中管理 backpressed,您可以创建接口实现并将其传递给 webview 以在您的 webview 中获取 backpressevent,然后您可以管理事情。

    请参阅此链接以获取webviewcallbacks

    【讨论】:

      【解决方案2】:

      我解决了这个问题:

      package com.example.youtubewebview;
      
      import androidx.appcompat.app.AppCompatActivity;
      
      import android.content.Context;
      import android.graphics.Bitmap;
      import android.graphics.BitmapFactory;
      import android.net.ConnectivityManager;
      import android.net.NetworkInfo;
      import android.os.Bundle;
      import android.view.View;
      import android.webkit.WebChromeClient;
      import android.webkit.WebSettings;
      import android.webkit.WebView;
      import android.webkit.WebViewClient;
      import android.widget.FrameLayout;
      
      public class MainActivity extends AppCompatActivity {
      
          WebView webView;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              webView=findViewById(R.id.webView);
              final FrameLayout frameLayout=findViewById(R.id.frameLayout);
      
              webView.getSettings().setJavaScriptEnabled(true);
              webView.setWebViewClient(new Browser_Home());
              WebSettings webSettings=webView.getSettings();
              webSettings.setJavaScriptEnabled(true);
              webSettings.setAllowFileAccess(true);
              webSettings.setAppCacheEnabled(true);
              webView.setWebChromeClient(new ChromeClient());
      
              if (savedInstanceState==null){
                  webView.post(new Runnable() {
                      @Override
                      public void run() {
                          loadWebSite();
                      }
                  });
              }
          }
      
          @Override
          protected void onSaveInstanceState(Bundle outState )
          {
              super.onSaveInstanceState(outState);
              webView.saveState(outState);
          }
      
          @Override
          protected void onRestoreInstanceState(Bundle savedInstanceState)
          {
              super.onRestoreInstanceState(savedInstanceState);
              webView.restoreState(savedInstanceState);
          }
      
          private void loadWebSite() {
              webView.loadUrl("https://www.youtube.com/voltagelab");
          }
      
          private class Browser_Home extends WebViewClient {
              Browser_Home(){}
      
              @Override
              public void onPageStarted(WebView view, String url, Bitmap favicon) {
                  super.onPageStarted(view, url, favicon);
              }
      
              @Override
              public void onPageFinished(WebView view, String url) {
                  super.onPageFinished(view, url);
              }
          }
      
          private class ChromeClient extends WebChromeClient {
              private View mCustomView;
              private WebChromeClient.CustomViewCallback mCustomViewCallback;
              protected FrameLayout mFullscreenContainer;
              private int mOriginalOrientation;
              private int mOriginalSystemUiVisibility;
      
              ChromeClient() {}
      
              public Bitmap getDefaultVideoPoster()
              {
                  if (mCustomView == null) {
                      return null;
                  }
                  return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
              }
      
              public void onHideCustomView()
              {
                  ((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
                  this.mCustomView = null;
                  getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
                  setRequestedOrientation(this.mOriginalOrientation);
                  this.mCustomViewCallback.onCustomViewHidden();
                  this.mCustomViewCallback = null;
              }
      
              public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback)
              {
                  if (this.mCustomView != null)
                  {
                      onHideCustomView();
                      return;
                  }
                  this.mCustomView = paramView;
                  this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
                  this.mOriginalOrientation = getRequestedOrientation();
                  this.mCustomViewCallback = paramCustomViewCallback;
                  ((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
                  getWindow().getDecorView().setSystemUiVisibility(3846);
              }
          }
      }
      

      清单要求的更改

      <activity android:name=".MainActivity"            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
      

      我的 XML 代码

      <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/frameLayout"
          tools:context=".MainActivity">
      
              <WebView
                  android:id="@+id/webView"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"/>
      </FrameLayout>
      

      【讨论】:

      • 你如何修复全屏后退选项
      • 什么是 2130837573?
      猜你喜欢
      • 2016-03-30
      • 2012-05-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多