Der folgende Code benötigt, um spielen wollen, ist das Video-Player zu zeigen, dass durch gestartet das Webkern-Framework. Der Schlüssel für den gesamten Ablauf ist, dass das VideoView an den WebChromeClient zurückgegeben wird und Sie diese Ansicht an Ihre Ansichtshierarchie anhängen müssen.
Ich habe es durch Überprüfung der Browser-Quellcode als Teil der AOSP zusammengestellt.
Dieser Code verweist auf 4 Ansichten, die möglicherweise nicht offensichtlich sind.Die Ansichtshierarchie ist:
FrameLayout mContentView
(root)
WebView mWebView
(Kind mContentView)
FrameLAyout mCustomViewContainer
(Kind mContentView)
View mCustomView
(Kind mCustomViewContainer)
Die Ansichten werden als Teil des Einrichtens der Containeraktivität konfiguriert.
<FrameLayout
android:id="@+id/fullscreen_custom_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF000000"/>
<FrameLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
</FrameLayout>
In Ihren Aktivitäten onCreate
:
mContentView = (FrameLayout) findViewById(R.id.main_content);
mWebView = (WebView) findViewById(R.id.webView);
mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);
ein WebChromeClient
mit mWebView
registrieren.
void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
{
// if a view already exists then immediately terminate the new one
if (mCustomView != null)
{
callback.onCustomViewHidden();
return;
}
// Add the custom view to its container.
mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
mCustomView = view;
mCustomViewCallback = callback;
// hide main browser view
mContentView.setVisibility(View.GONE);
// Finally show the custom view container.
mCustomViewContainer.setVisibility(View.VISIBLE);
mCustomViewContainer.bringToFront();
}
void onHideCustomView()
{
if (mCustomView == null)
return;
// 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.
mContentView.setVisibility(View.VISIBLE);
}
public Bitmap getDefaultVideoPoster()
{
if (mDefaultVideoPoster == null)
{
mDefaultVideoPoster = BitmapFactory.decodeResource(getResources(), R.drawable.default_video_poster);
}
return mDefaultVideoPoster;
}
public View getVideoLoadingProgressView()
{
if (mVideoProgressView == null)
{
LayoutInflater inflater = LayoutInflater.from(this);
mVideoProgressView = inflater.inflate(R.layout.video_loading_progress, null);
}
return mVideoProgressView;
}
Sie auch ähnliche Aktivität Life-Cycle-Bindungen hinzufügen möchten:
@Override
protected void onStop()
{
super.onStop();
if (mCustomView != null)
{
if (mCustomViewCallback != null)
mCustomViewCallback.onCustomViewHidden();
mCustomView = null;
}
}
@Override
public void onBackPressed()
{
if (mCustomView != null)
{
onHideCustomView();
} else
{
finish();
}
}
Um Ihre Aktivität das Video ausblenden zu machen, wenn die Aktivität 4 Methoden - Das Client sollte die folgenden 2 außer Kraft setzen gestoppt oder die Zurück-Taste gedrückt wird.
dies für Sie mit allen Versionen von Android Passiert? Ich habe ähnliches gesehen aber nur unter 4.1 – Nick
@Nick: Dieses Problem auch mit Android 3.0, 4.0. –
@RanjitChandel Ich habe das gleiche Problem ... –