レイアウトmain.xmlからWebViewのURLを設定しようとしています。
コードでは、それは簡単です:
WebView webview = (WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///Android_asset/index.html");
このロジックをレイアウトXMLファイルに入れる簡単な方法はありますか?
here の説明に従って、カスタムビューを宣言してカスタム属性を適用できます。
結果は次のようになります。
レイアウト内
<my.package.CustomWebView
custom:url="@string/myurl"
Android:layout_height="match_parent"
Android:layout_width="match_parent"/>
attr.xml
<resources>
<declare-styleable name="Custom">
<attr name="url" format="string" />
</declare-styleable>
</resources>
最後にカスタムWebビュークラスで
public class CustomWebView extends WebView {
public CustomWebView(Context context, AttributeSet attributeSet) {
super(context);
TypedArray attributes = context.getTheme().obtainStyledAttributes(
attributeSet,
R.styleable.Custom,
0, 0);
try {
if (!attributes.hasValue(R.styleable.Custom_url)) {
throw new RuntimeException("attribute myurl is not defined");
}
String url = attributes.getString(R.styleable.Custom_url);
this.loadUrl(url);
} finally {
attributes.recycle();
}
}
}
Kotlinとバインディングアダプターを使用すると、Webviewの単純な属性を作成できます
ファイルBindingUtils.ktを作成します
@BindingAdapter("webViewUrl") <- Attribute name
fun WebView.updateUrl(url: String?) {
url?.let {
loadUrl(url)
}
}
そして、xmlファイル:app:webViewUrl = "@ {@ string/licence_url}"
Android:id="@+id/wvLicence"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
**app:webViewUrl="@{@string/licence_url}"**
tools:context=".LicenceFragment"/>