AndroidアプリのフラグメントにVimeoビデオを埋め込むことについて、実際にはあまり見つけられずに、loooootを検索してきました。
回答は、Vimeo Pro アカウントを持っているか、iframe を使用するか、外部プレーヤーや非公式ライブラリなどを使用する必要があることを示唆しています。
私はまだ Android 開発に慣れていないので、これらの提案を実用的なソリューションに実装することはできませんでした。
したがって、これに不慣れで、最も単純な形式でフラグメント内に vimeo ビデオを埋め込みたいと考えている他の人がいる場合は、TextView と ImageView を含むフラグメント内に vimeo ビデオを埋め込むためのコードを共有したいと思います。ScrollView が必要です。そうしないと、回転すると imageView が縮小されます。
私が注意する唯一のことは、webview の読み込みが少し遅いことです。そのため、しばらくの間、他のビューのみが表示されます。改善とベスト プラクティスに関する提案は大歓迎です。
レイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/webView"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginRight="8dp"
android:layout_marginLeft="8dp"
android:gravity="center"
android:text="PUT_TEXT"
android:textSize="20sp"
android:textStyle="italic"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:adjustViewBounds="true"
android:gravity="bottom"
android:paddingTop="0dp"
android:src="@drawable/PUT_IMAGE_HERE"
app:srcCompat="@drawable/PUT_IMAGE_HERE" />
</LinearLayout>
</ScrollView>
私のフラグメント
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewFragment extends android.support.v4.app.Fragment {
public WebView webView;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
webView = (WebView) view.findViewById(R.id.webView);
webView.setInitialScale(1);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
DisplayMetrics displaymetrics = new DisplayMetrics();
((WindowManager)getContext()
.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay()
.getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
Log.e("WebView Log", width + "-" + height);
String data_html = "<!DOCTYPE html><html> <head> <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"target-densitydpi=high-dpi\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"stylesheet\" media=\"screen and (-webkit-device-pixel-ratio:1.5)\" href=\"hdpi.css\" /></head> <body style=\"background:white;margin:0 0 0 0; padding:0 0 0 0;\"> <iframe style=\"background:white;\" width=' "+width+"' height='"+height/2+"' src=\""+"YOUR VIMEO URL"+"\" frameborder=\"0\"></iframe> </body> </html> ";
webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.webview_exercise, container, false);
}
}