Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Видео (WebView) в полноэкранном режиме не до конца масштабируется под размер экрана

Пишу клиент для сайта. Есть WebView в который грузится контент, в том числе видео. Реализовал чтобы работал полноэкранный режим, но видео разворачивается не во всю ширину экрана. По бокам остается пространство. Прошу помочь советом, что сделал не так или куда смотреть.





public class DescriptionActivity extends Activity {
ProgressDialog mProgressDialog; private WebChromeClient.CustomViewCallback mFullscreenViewCallback; private FrameLayout mFullScreenContainer; private View mFullScreenView; private WebView mWebView;
private static final int SUCCESS = 1; private static final int NETWORK_ERROR = 2; private static final int ERROR = 3;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_description);
mWebView = (WebView) findViewById(R.id.web_view); mFullScreenContainer = (FrameLayout) findViewById(R.id.fullscreen_container); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebChromeClient(mWebChromeClient);
mWebView.setScrollbarFadingEnabled(true); mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); mWebView.setPadding(0, 0, 0, 0);
WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8");
new getHtml().execute(); }
private class getHtml extends AsyncTask { Elements tfa; Elements title; Elements comments;
@Override protected void onPreExecute() { mProgressDialog = new ProgressDialog(DescriptionActivity.this); mProgressDialog.setMessage("Загрузка..."); mProgressDialog.setIndeterminate(false); mProgressDialog.show(); }
@Override protected Integer doInBackground(String... params) { try {
Uri urls = getIntent().getData(); String url = urls.toString();
Document doc = Jsoup.connect(url) .userAgent("Mozilla") .cookie("auth", "token") .timeout(10000) .get();
title = doc.select(".c1-post").select("span"); tfa = doc.select(".c1-post-data"); comments = doc.select(".content").select(".comments");
return SUCCESS; } catch (UnknownHostException e) { Log.e("Unknown Host Exception", "Network error", e); return NETWORK_ERROR; } catch (IOException e) { Log.e("IO Exception", "Failed to load HTML", e); return ERROR; } catch (Exception e) { Log.e("Exception", "An exception occured", e); return ERROR; }
}
@Override protected void onPostExecute(Integer result) {
if (result == 2) { Toast.makeText( getApplicationContext(), "Network connection error. Check your internet connection and try again.", Toast.LENGTH_LONG).show(); } else if (result == 3) { Toast.makeText(getApplicationContext(), "Unknown error. Failed to load.", Toast.LENGTH_LONG).show(); } else if (result == 1) {
String comqqq = Jsoup.clean(comments.toString(), Whitelist.basic());
mWebView.loadDataWithBaseURL("http://fratria.ru/", "" + "

" + title.html() + "

" + tfa.html() + comqqq, "text/html", "en_US", null); }
mProgressDialog.dismiss(); } }
@Override public void onResume() { super.onResume(); mWebView.onResume(); }
@Override public void onPause() { super.onPause(); mWebView.onPause(); }
private final WebChromeClient mWebChromeClient = new WebChromeClient() { @Override @SuppressWarnings("deprecation") public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { onShowCustomView(view, callback); }
@Override public void onShowCustomView(View view, CustomViewCallback callback) { if (mFullScreenView != null) { callback.onCustomViewHidden(); return; }
mFullScreenView = view; mWebView.setVisibility(View.GONE);
mFullScreenContainer.setVisibility(View.VISIBLE); mFullScreenContainer.addView(view); mFullscreenViewCallback = callback; }
@Override public void onHideCustomView() { super.onHideCustomView(); if (mFullScreenView == null) { return; } mWebView.setVisibility(View.VISIBLE);
mFullScreenContainer.setVisibility(View.GONE);
mFullScreenContainer.removeView(mFullScreenView); mFullscreenViewCallback.onCustomViewHidden(); mFullScreenView = null; } };
}


Ответ

Ну для начала я бы посоветовал прятать статус бар
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Тогда у видео будет достаточно высоты что бы при сохранении пропорций заполнить и ширину. Но если у экрана телефона соотношение сторон не соответствует таковому у видео, то тут уж без черных полос не обойдется...

Комментариев нет:

Отправить комментарий