질문 내용이 길어어 1과 2로 나누어 올립니다.
동영상 전체화면 fullscreen 구현하는 부분입니다.
mWebView.setWebChromeClient(new FullscreenableChromeClient(MainActivity.this));
웹뷰가 있는 MainActivity 페이지에서 이렇게 불러와서 구현하고 있습니다.
아래는 전체 내용 입니다.
FullscreenableChromeClient.java 파일
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.widget.FrameLayout;
public class FullscreenableChromeClient extends WebChromeClient {
private Activity mActivity = null;
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private int mOriginalOrientation;
private FrameLayout mFullscreenContainer;
private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
public FullscreenableChromeClient(Activity activity) {
this.mActivity = activity;
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mOriginalOrientation = mActivity.getRequestedOrientation();
FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView();
mFullscreenContainer = new FullscreenHolder(mActivity);
mFullscreenContainer.addView(view, COVER_SCREEN_PARAMS);
decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS);
mCustomView = view;
setFullscreen(true);
mCustomViewCallback = callback;
// mActivity.setRequestedOrientation(requestedOrientation);
}
super.onShowCustomView(view, callback);
}
@SuppressWarnings("deprecation")
@Override
public void onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
this.onShowCustomView(view, callback);
}
@Override
public void onHideCustomView() {
if (mCustomView == null) {
return;
}
setFullscreen(false);
FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView();
decor.removeView(mFullscreenContainer);
mFullscreenContainer = null;
mCustomView = null;
mCustomViewCallback.onCustomViewHidden();
mActivity.setRequestedOrientation(mOriginalOrientation);
}
private void setFullscreen(boolean enabled) {
Window win = mActivity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
if (enabled) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
if (mCustomView != null) {
mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
win.setAttributes(winParams);
}
private static class FullscreenHolder extends FrameLayout {
public FullscreenHolder(Context ctx) {
super(ctx);
setBackgroundColor(ContextCompat.getColor(ctx, android.R.color.black));
}
@Override
public boolean onTouchEvent(MotionEvent evt) {
return true;
}
}
}
웹뷰 화면에서 동영상 전체 보기를 클릭해서 보다가 백버튼을 누르면 페이지 돌아가기가 실행 됩니다.
서브페이지에서 동영상 전체 보기를 보다가 백버튼을 누르면 이전 페이지로 되돌아 갑니다.
아래는 웹뷰 백버튼 처리 부분 입니다.
<pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);"> @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { // 웹뷰 처음 화면이면 두번 누르면 경고 띄우고 어플 종료 되는 조건 입니다.
if (mWebView.getOriginalUrl().equalsIgnoreCase(MAIN_URL)) { // 메인화면에서 처음 누르면 경고 띄우고
if (!mFlag) {
Toast.makeText(this, "'뒤로'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show(); // 종료안내 toast 를 출력
mFlag = true;
mHandler.sendEmptyMessageDelayed(0, 2000); // 2000ms 만큼 딜레이
return false;
} else { // 메인화면에서 누번 누르면 앱 종료 됩니다.
// 앱 종료 code
moveTaskToBack(true);
finish();
android.os.Process.killProcess(Process.myPid());
}
} else { // 서버 페아지에서 백버튼 누르면 이전 페이지로 되돌아 갑니다.
// 뒤로 가기 실행
if (mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
}
}
return true;
}</pre>
백버튼 처리에서 위의 내용은 이해를 했습니다.
질문
1.메인에서나 서브 화면에서 유튜브 동영상 전체보기 화면에서 백버튼을 누르면 동영상 전체보기 화면에서 빠져 나오게 하고 싶습니다.
위에서 아래 부분을 어떻게 고쳐야 하는지 도움 부탁드립니다. ㅜㅜ; 몇시간 째 삽질입니다.
public boolean onKeyDown(int keyCode, KeyEvent event) {
}
새해 복 많이 받으시고 건승을 빕니다.