1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android开发之部分字符串可实现超链接点击事件的方法

Android开发之部分字符串可实现超链接点击事件的方法

时间:2023-02-20 08:15:01

相关推荐

Android开发之部分字符串可实现超链接点击事件的方法

我们先来看下效果图:

直接上代码:

mainactivity.java

package com.qfy.linksdemo;import android.app.Activity;import android.content.Intent;import android.graphics.Color;import .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("扬宏豕慧使用协议", "/tb/eula.html");}};View.OnClickListener agreement2 = new View.OnClickListener() {@Overridepublic void onClick(View v) {startProtocol("腾讯开发平台的开户协议", "http://wiki./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(轻飞扬)* 创建时间:/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);}}

看不懂的可以下载源码查看:

点击下载源码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。