web-dev-qa-db-fra.com

Comment définir l'URL de WebView à partir de la mise en page XML dans Android?

J'essaie de définir l'URL d'une WebView à partir de la mise en page main.xml.

Par code, c'est simple:

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

Existe-t-il un moyen simple de mettre cette logique dans le fichier XML de mise en page?

29
Vidar Vestnes

Vous pouvez déclarer votre vue personnalisée et appliquer des attributs personnalisés comme décrit ici .

Le résultat ressemblerait à ceci:

dans votre mise en page

<my.package.CustomWebView
        custom:url="@string/myurl"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"/>

dans votre attr.xml

<resources>
    <declare-styleable name="Custom">
        <attr name="url" format="string" />
    </declare-styleable>
</resources>

enfin dans votre classe d'affichage Web personnalisée

    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

Avec Kotlin et l'adaptateur de liaison, vous pouvez créer un attribut simple pour la vue Web

Créer un fichier BindingUtils.kt

@BindingAdapter("webViewUrl") <- Attribute name
fun WebView.updateUrl(url: String?) {
    url?.let {
        loadUrl(url)
    }
}

et dans le fichier 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