(四十八)Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

1、程序结构图

 

技术分享

2、MainActivity.java中的代码

package com.example.setlinkdemo;

import java.io.IOException;

import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.TextAppearanceSpan;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView tv_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_content = (TextView) this.findViewById(R.id.tv_content);
        setLink();
    }

    public  void setLink() {
        // TODO Auto-generated method stub
        // 创建一个 SpannableString对象
        SpannableString sp = new SpannableString(
                Html.fromHtml(getString(R.string.set_account_check)));
        sp.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                // TODO Auto-generated method stub
                startActivity(new Intent(MainActivity.this, TestActivity.class));
            }
        }, 11, 15, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

        ColorStateList csl = null;
        XmlResourceParser xpplinkcolor = getResources().getXml(
                R.color.link_color);
        try {
            csl = ColorStateList.createFromXml(getResources(), xpplinkcolor);
        } catch (XmlPullParserException e1) {
            e1.printStackTrace();
        } catch (IOException e2) {
            e2.printStackTrace();
        }

        sp.setSpan(
                new TextAppearanceSpan("monospace",
                        android.graphics.Typeface.NORMAL, (int) tv_content
                                .getTextSize(), csl, csl), 11, 15,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv_content.setText(sp);
        // 不添加这一句,超链接不能点击
        tv_content.setMovementMethod(LinkMovementMethod.getInstance());
    }

}

3、TestActivity.java中的代码

package com.example.setlinkdemo;

import android.app.Activity;
import android.os.Bundle;

public class TestActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

4、link_color.xml文件中的代码

<?xml version="1.0" encoding="utf-8"?>
<selector  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#0099cc"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#0099cc"/> <!-- focused -->
    <item android:color="#0099cc"/> <!-- default -->
</selector>

6、strings.xml文件中的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">SetLinkDemo</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="set_account_check">继续进行意味着您已同意服务协议</string>

</resources>

7、AndroidManifest.xml文件中的代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.setlinkdemo"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".TestActivity" >
        </activity>
    </application>
</manifest>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。