Android Youtube Webview Полный экран назад нажмите выход из приложения - PullRequest
0 голосов
/ 29 марта 2020

Youtube Полный экран работает нормально, но когда я нажимаю кнопку «Назад», приложение автоматически закрывается. Я хочу, чтобы, когда я нажму кнопку «Назад» в полноэкранном режиме, то я хочу go вернуть мою предыдущую страницу. Вот мой код:

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);
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Я решаю эту проблему:

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>
0 голосов
/ 29 марта 2020

Вы можете переопределить onbackpressed и обработать его вручную

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

, и если вы хотите управлять backpressed в веб-представлении, вы можете создать реализацию интерфейса и передать ее веб-представлению, чтобы получить backpressevent в вашем веб-представлении и тем самым вы можете управлять вещами.

См. эту ссылку для webviewcallbacks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...