Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity
在一个大的Android项目中,由于客户端来不及更新和实现,经常会内嵌一些网页(在一些大型的互联网公司,PC的产品总是跑在客户端的前面),比如活动页面,通常可以内嵌用html5实现的页面,可以适配手机。但是这些网页中有好多链接,但是这些链接有些内容有是我们客户端已经实现的,比如有一个注册链接,其实客户端也实现了注册功能,我们不想再继续跳转到网页注册,而是打开客户端某个注册Activity,可以通过以下方式来实现:
xml 文件,如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rva_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <WebView android:id="@+id/public_webview_webview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#abcabc" /> <ProgressBar android:id="@+id/public_webview_progressbar" style="?android:attr/progressBarStyleSmall" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:visibility="visible" /> <LinearLayout android:id="@+id/public_webview_top" android:layout_width="fill_parent" android:layout_height="52dip" android:layout_alignParentTop="true" android:background="@drawable/top_bj" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="52dip" android:layout_gravity="center" android:background="@drawable/top_bj" > <ImageButton android:id="@+id/public_webview_back" style="@style/back_button_style" /> <ImageView android:layout_toRightOf="@+id/public_webview_back" style="@style/back_line_style"/> <TextView android:id="@+id/public_webview_title" android:layout_toRightOf="@+id/public_webview_back" style="@style/top_title_style" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
java代码如下:
/** * 通用的webview,只需要传入2个参数即可, param1:title 标题 param2:url 网站 * * */ public class PublicWebView extends Activity { private WebView webview; private ImageButton back; private LinearLayout public_webview_top; private boolean showTitle; private ProgressBar progressBar; @SuppressLint("JavascriptInterface") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.public_webview); Intent intent = getIntent(); String url = intent.getStringExtra("url"); String title = intent.getStringExtra("title"); showTitle = intent.getBooleanExtra("show_title", true); public_webview_top = (LinearLayout) findViewById(R.id.public_webview_top); if (showTitle) { public_webview_top.setVisibility(View.VISIBLE); } else { public_webview_top.setVisibility(View.GONE); } TextView titletv = (TextView) findViewById(R.id.public_webview_title); titletv.setText(title); progressBar = (ProgressBar) findViewById(R.id.public_webview_progressbar); webview = (WebView) findViewById(R.id.public_webview_webview); // 加载需要显示的网页 webview.addJavascriptInterface(new JavascriptInterface(PublicWebView.this), "Phoenix_Android"); webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 设置WebView属性,能够执行Javascript脚本 webview.getSettings().setJavaScriptEnabled(true); // 加载需要显示的网页 webview.loadUrl(url); // 设置Web视图 webview.setWebViewClient(new MyWebViewClient()); webview.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { progressBar.setVisibility(View.GONE); } else{ progressBar.setVisibility(View.VISIBLE); } super.onProgressChanged(view, newProgress); } }); back = (ImageButton) findViewById(R.id.public_webview_back); back.setOnClickListener(new BackListener(PublicWebView.this, null, 1)); } @SuppressLint("NewApi") public class JavascriptInterface { @SuppressWarnings("unused") private Context context; public JavascriptInterface(Context context) { this.context = context; } public void back(String module, int status, String place) { reFreshBlance(); if (status == -1) { // 用户取消了 return; } else if (status == 0) { Toast.makeText(PublicWebView.this, "充值请求失败,请稍后重试...", Toast.LENGTH_SHORT).show(); return; } else if (status == 1) { // 充值请求成功 reFreshBlance(); // 1.用户中心进来的有两个参数 // a.bet参数是返回购彩界面 // b.userCenter返回用户中心 } } } // 监听 所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { System.out.println("----------------------shouldOverrideUrlLoading 。。 url:" + url); if (url != null && url.contains("/m/phoneRegiste.do")) { Intent intent = new Intent(PublicWebView.this, RegisterByPhone.class); PublicWebView.this.startActivity(intent); finish(); return true; } return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { view.getSettings().setJavaScriptEnabled(true); super.onPageFinished(view, url); } } // 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) { // webview.goBack();// 返回前一个页面 finish(); return true; } return super.onKeyDown(keyCode, event); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。