web-dev-qa-db-fra.com

Comment ouvrir une page Web dans mon application?

Ceci est ma première question ici. Je sais que cette question a déjà été posée, mais je n’ai pas trouvé de réponse/solution qui explique réellement la réponse d’un novice comme moi.

Je crée une application avec une mise en page linéaire comportant de nombreux boutons, chaque bouton devant guider l'utilisateur vers une page Web différente. Les boutons fonctionnent bien et tous les boutons permettent d'accéder à sa page Web spécifique, mais dans le navigateur par défaut et non dans l'application.

Ceci est mon fichier webview.xml:

<WebView  xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/webView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />

C'est le fichier WebViewActivity.Java:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(
            "http://egy-tech-droid.blogspot.com.eg/search/label/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA%20%D8%AD%D8%B5%D8%B1%D9%8A%D8%A9");

}

J'ai ajouté l'autorisation Internet dans le fichier Manifest:

 <uses-permission Android:name="Android.permission.INTERNET" />

Cela ouvre la page Web, mais dans le navigateur par défaut de l'appareil et je veux qu'il s'ouvre dans mon application. De l'aide? (donnez-moi s'il vous plaît une réponse détaillée/explication)

10
M. Omar

Ajoutez ceci à votre code

webView.setWebViewClient(new WebViewClient(){

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
      view.loadUrl(url);
      return true;
    }
});
9
Sunny

Profitez du code complet:

Oncreate (): 

        webView = (WebView) findViewById(R.id.webView1);

        if(Constants.isNetworkAvailable(mContext)){
            webView.setWebViewClient(new MyWebViewClient());
            webView.setWebChromeClient(new WebChromeClient() );

            webView.getSettings().setJavaScriptEnabled(true);     
            webView.getSettings().setPluginState(PluginState.ON);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.getSettings().setSupportZoom(true); 

            webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            webView.setScrollbarFadingEnabled(false);

            webView.setInitialScale(30);
            webView.loadUrl(url);

        }else{
            Toast.makeText(mContext, Constants.msgNoInternet, Toast.LENGTH_LONG).show();
        }

MyWebViewClient:

private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            if (!pDialog.isShowing()) {
                pDialog.show();
            }

            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //view.loadUrl(url);
            System.out.println("on finish");
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }

        }
    }
1
KishuDroid

Vous devez configurer une WebViewClient afin de remplacer ce comportement (ouverture de liens à l'aide du navigateur Web). 

Utilisez ceci;

webview.setWebViewClient(new WebViewClient());

La documentation Android dit:

public void setWebViewClient (client WebViewClient)

Définit le WebViewClient qui recevra diverses notifications et demandes. Cela remplacera le gestionnaire actuel.

1
Rajesh

J'espère que cela t'aidera.

Dans votre mise en page Web:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/mainll"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <RelativeLayout
        Android:id="@+id/relay"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:background="#c7bbac">

        <ImageView
            Android:id="@+id/txtmain"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:adjustViewBounds="true"
            Android:scaleType="fitXY"
            Android:src="@drawable/topbar50" />

        <ImageView
            Android:id="@+id/backbutn"
            Android:layout_width="wrap_content"
            Android:layout_height="30dp"
            Android:adjustViewBounds="true"
            Android:paddingTop="2dp"
            Android:src="@drawable/backbtn" />
    </RelativeLayout>

    <WebView  
        Android:id="@+id/webView1"
        Android:layout_below="@+id/relay"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent" />

</RelativeLayout>

Webview Button Onclick:

webbutton = (ImageView) findViewById(R.id.web);
webbutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        Intent intent = new Intent(getApplicationContext(), WebViewActivity.class);
        startActivity(intent);
    }
});

Activité Webview:

public class WebViewActivity extends Activity {

private WebView webViewurl;
ImageView back;
AndroidInterface AMW = AndroidInterface.GetInstance();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    back = (ImageView) findViewById(R.id.backbutn);
    webViewurl = (WebView) findViewById(R.id.webView1);

    webViewurl.getSettings().setJavaScriptEnabled(true);

    webViewurl.getSettings().setBuiltInZoomControls(true);
    final Activity activity = this;
    webViewurl.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
        }
    });
    webViewurl.loadUrl("http://example.com");

    back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });
}
0

Version Kotlin de la réponse de Sunny

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        view?.loadUrl(request?.url.toString())
        return true
    }
}
0
Rammohan Raja
 webView = (WebView) findViewById(R.id.youtubelink);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("your url");

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
0
S HemaNandhini