Comment puis-je définir L'URL pour WebView à partir de layout XML dans Android?

J'essaie de définir L'URL d'un WebView à partir de la mise en page principale.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?

28
demandé sur Pang 2011-03-07 15:37:29

2 réponses

Puisque L'URL est essentiellement une chaîne, vous pouvez la mettre dans values / strings.fichier xml

<resources>
    <string name="myurl">http://something</string>
</resources>

Ensuite, vous pouvez l'utiliser comme ceci:

WebView webview = (WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl(getString(R.string.myurl));
-2
répondu Peter Knego 2011-03-07 12:49:30

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 de vue 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
répondu loklok 2017-03-22 10:39:25