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;

    @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);
    }
}

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

点击下载源码

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/83022854
今日推荐