我们先来看下效果图:
直接上代码:
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;
@Override
protected 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;
}
@Override
public void onClick(View v) {
mListener.onClick(v);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);
}
}
/**
* 协议1点击的监听
*/
View.OnClickListener agreement1 = new View.OnClickListener() {
@Override
public void onClick(View v) {
startProtocol("扬宏豕慧使用协议", "http://tieba.baidu.com/tb/eula.html");
}
};
View.OnClickListener agreement2 = new View.OnClickListener() {
@Override
public 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.reapal.mobile.login
*/
public class AgreementActivity extends Activity {
@Override
protected 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() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
wvAgreement.loadUrl(url);
}
}
看不懂的可以下载源码查看: