Android开发之部分字符串可实现超链接点击事件的方法
生活随笔
收集整理的這篇文章主要介紹了
Android开发之部分字符串可实现超链接点击事件的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們先來看下效果圖:
直接上代碼:
mainactivity.java
package com.qfy.linksdemo;import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.TextAppearanceSpan; import android.view.View; import android.widget.CheckBox;public class MainActivity extends Activity {private CheckBox cbAgreement;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);cbAgreement = findViewById(R.id.cb_agreement);setAgreement();}private void setAgreement() {SpannableString msp = new SpannableString("我閱讀并同意《揚宏豕慧使用協議》和《騰訊開發平臺的開戶協議》");int length = msp.length();//設置字體前景色msp.setSpan(new ForegroundColorSpan(Color.parseColor("#555555")), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(new ForegroundColorSpan(Color.parseColor("#8B1C21")), 6, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(new ForegroundColorSpan(Color.parseColor("#555555")), 16, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(new ForegroundColorSpan(Color.parseColor("#8B1C21")), 17, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置字體大小(絕對值,單位:像素)msp.setSpan(new TextAppearanceSpan(this, 16), 0, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(new Clickable(agreement1), 6, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(new Clickable(agreement2), 17, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);cbAgreement.setText(msp);cbAgreement.setClickable(true);cbAgreement.setMovementMethod(LinkMovementMethod.getInstance());cbAgreement.setHighlightColor(Color.TRANSPARENT);}/*** 創建 clickable對象*/class Clickable extends ClickableSpan implements View.OnClickListener {private final View.OnClickListener mListener;public Clickable(View.OnClickListener l) {mListener = l;}@Overridepublic void onClick(View v) {mListener.onClick(v);}@Overridepublic void updateDrawState(TextPaint ds) {ds.setUnderlineText(false);}}/*** 協議1點擊的監聽*/View.OnClickListener agreement1 = new View.OnClickListener() {@Overridepublic void onClick(View v) {startProtocol("揚宏豕慧使用協議", "http://tieba.baidu.com/tb/eula.html");}};View.OnClickListener agreement2 = new View.OnClickListener() {@Overridepublic void onClick(View v) {startProtocol("騰訊開發平臺的開戶協議", "http://wiki.open.qq.com/wiki/%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E8%80%85%E5%8D%8F%E8%AE%AE");}};private void startProtocol(String title, String url) {Intent intent = new Intent(this, AgreementActivity.class);intent.putExtra("title", title);intent.putExtra("url", url);startActivity(intent);} }2.跳轉協議的頁面
package com.qfy.linksdemo;import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Window; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.TextView;/*** @author 下一頁5(輕飛揚)* 創建時間:2018/9/20 18:50* 空間名稱:group-wallet-android* 項目包名:com.yhsh.mobile.login*/ public class AgreementActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.agreement_dialog);initView();}public void initView() {String title = getIntent().getStringExtra("title");String url = getIntent().getStringExtra("url");TextView tvTitle = findViewById(R.id.toolbar_title);tvTitle.setText(title);WebView wvAgreement = findViewById(R.id.wv_agreement);WebSettings webSettings = wvAgreement.getSettings();webSettings.setSupportZoom(true);webSettings.setJavaScriptEnabled(true);webSettings.setJavaScriptCanOpenWindowsAutomatically(true);webSettings.setBuiltInZoomControls(true);webSettings.setAllowFileAccess(true);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {webSettings.setAllowFileAccessFromFileURLs(true);webSettings.setAllowUniversalAccessFromFileURLs(true);}webSettings.setUseWideViewPort(true);webSettings.setLoadWithOverviewMode(true);webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);int mDensity = metrics.densityDpi;if (mDensity == 240) {webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);} else if (mDensity == 160) {webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);} else if (mDensity == 120) {webSettings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);} else if (mDensity == DisplayMetrics.DENSITY_XHIGH) {webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);} else if (mDensity == DisplayMetrics.DENSITY_TV) {webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);}wvAgreement.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return super.shouldOverrideUrlLoading(view, url);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}});wvAgreement.loadUrl(url);} }看不懂的可以下載源碼查看:
點擊下載源碼
總結
以上是生活随笔為你收集整理的Android开发之部分字符串可实现超链接点击事件的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IT之家评测室】OPPO Wi-Fi
- 下一篇: Android修改原生AlertDial