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)
Ajoutez ceci à votre code
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
});
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();
}
}
}
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.
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();
}
});
}
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
}
}
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;
}
});