web-dev-qa-db-ja.com

AndroidでレイアウトXMLからWebViewのURLを設定するにはどうすればよいですか?

レイアウトmain.xmlからWebViewのURLを設定しようとしています。

コードでは、それは簡単です:

WebView webview = (WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///Android_asset/index.html");

このロジックをレイアウトXMLファイルに入れる簡単な方法はありますか?

29
Vidar Vestnes

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();
            }
        }
    }
3
loklok

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"/>
0
Maor Hadad