新浦京81707con > 注册购买 > Android学习笔记,Android如何通过TextView实现超链接

原标题:Android学习笔记,Android如何通过TextView实现超链接

浏览次数:154 时间:2020-03-13

延伸链接##新澳门葡京娱乐场下载,

Android TextView使用HTML管理字体样式、展现图片

里头getClickableSpan方法的首要代码如下所示:

2.9 自动换行

机关换行通过 android:singleLine 设置,默认为 false。

如须要活动换行,能够用:

android:singleLine = "false"

举个例子要在一行展现完,不换行,能够用:

android:singleLine = "true"

除却,能够也安装多行展现不完,增多个maxLines的天性就能够!

 

小说参照他事他说加以考查自:

 

值得学习##

Android实战才能之一:文本与构造Android textView 加多超链接 百度领悟有关SpannableString用法介绍对比详细的

新澳门葡京娱乐场下载 1MovementMethod子类关系.pngGoogle出来的第一篇博客,垃圾百度竟然第一页都未曾那篇文章

精心的你们恐怕会开掘上述都以对一部分链接举行的操作,当然你们恐怕会说能够透过自定义链接的样式对点名的文字进行正则相称来兑现,然而透过正则相称普通话的话应该相比难贯彻吗,所以,我们能够透过形似于html中中国足球球联赛链接(即a标签)的办法来达成,考虑到字符串的来自及格式,于是总计出了相比常用的以下3种,首要代码如下所示:

2.8 设置TextView字间隔和行间距

就如大家日常编写文书档案的时候,大家供给制版,设置下行也许字以内的间距是吗: Android中的TextView也得以开展如此的装置:

字间距:

android:textScaleX:控制字体水平方向的缩放,默认值1.0f,值是float
Java中setScaleX(2.0f);

行间距: Android系统中TextView私下认可突显中文时会比较紧密,为了让每行保持的行间隔

android:lineSpacingExtra:安装行间隔,如"3dp" android:lineSpacingMultiplier:安装行间隔的翻番,如"1.2"

Java代码中得以经过: setLineSpacing措施来安装

写在前面的话

本文仅是自笔者自身读书的下结论笔记,参谋英特网多篇文章,本人仅做了供给的下结论和效果与利益展现。

新澳门葡京娱乐场下载 2

2.6 SpannableString&SpannableStringBuilder定制文本

除了那个之外上边的HTML能够定制大家TextView的体裁外,还是还不错SpannableString和SpannableStringBuilder来成功,两个分别:前边贰个针没有错是不可变文本,而后人则是对准可变文本

1)最简易例子: 运转效果图:

新澳门葡京娱乐场下载 3

贯彻代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView) findViewById(R.id.txtOne);
        TextView t2 = (TextView) findViewById(R.id.txtTwo);

        SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:.");
        //1.设置背景色,setSpan时需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
        span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //2.用超链接标记文本
        span.setSpan(new URLSpan("tel:4155551212"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //3.用样式标记文本(斜体)
        span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //4.用删除线标记文本
        span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //5.用下划线标记文本
        span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //6.用颜色标记
        span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //7.//获取Drawable资源
        Drawable d = getResources().getDrawable(R.drawable.icon);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        //8.创建ImageSpan,然后用ImageSpan来替换文本
        ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        t1.setText(span);
    }
}

2)达成部分可点击的TextView 相信玩过QQ空间和Wechat交际圈的爱人对下边包车型客车东东并不面生吧,大家得以点击 对应的客户然后进入查看客户相关的音信是啊!

新澳门葡京娱乐场下载 4

上面大家就来写个简单的事例来落到实处下效果:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView) findViewById(R.id.txtOne);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 20; i  ) {
            sb.append("好友"   i   ",");
        }

        String likeUsers = sb.substring(0, sb.lastIndexOf(",")).toString();
        t1.setMovementMethod(LinkMovementMethod.getInstance());
        t1.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE);
    }

    //定义一个点击每个部分文字的处理方法
    private SpannableStringBuilder addClickPart(String str) {
        //赞的图标,这里没有素材,就找个笑脸代替下~
        ImageSpan imgspan = new ImageSpan(MainActivity.this, R.drawable.ic_widget_face);
        SpannableString spanStr = new SpannableString("p.");
        spanStr.setSpan(imgspan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

        //创建一个SpannableStringBuilder对象,连接多个字符串
        SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
        ssb.append(str);
        String[] likeUsers = str.split(",");
        if (likeUsers.length > 0) {
            for (int i = 0; i < likeUsers.length; i  ) {
                final String name = likeUsers[i];
                final int start = str.indexOf(name)   spanStr.length();
                ssb.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View widget) {
                        Toast.makeText(MainActivity.this, name,
                                Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void updateDrawState(TextPaint ds) {
                        super.updateDrawState(ds);
                        //删除下划线,设置字体颜色为蓝色
                        ds.setColor(Color.BLUE);
                        ds.setUnderlineText(false);
                    }
                },start,start   name.length(),0);
            }
        }
    return ssb.append("等"   likeUsers.length   "个人觉得很赞");
    }
}

运转作效果果图:

新澳门葡京娱乐场下载 5

中央其实正是:ClickableSpan的安装而已~

方法一:设置autoLink

autoLink:一共有以下两种值:web,phone,map,email,all,none。分别是:url连接,电话号码提取拨号,地图地址,电子邮件,全部阐述便是能扶持的精品连接一切起效果,none即是暗中认可意况,未有超链接。

  • 布局
 <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="15" android:autoLink="all"//布局中使用这一句 />
  • 代码
 String html = "http://www.baidu.com"; mTextView.setAutoLinkMask(Linkify.ALL);//布局中设置android:autoLink 后这一句就不需要了 mTextView.setText;
  • 言传身教效果

新澳门葡京娱乐场下载 6设置autoLink.gif

  • Tips上述代码中的网站,能够不加http://,也能被系统识别出来

//种种形式

TextView  tv_multiHyperLink = (TextView) findViewById(R.id.tv_multiHyperLink);

Linkify.addLinks(tv_multiHyperLink,Linkify.PHONE_NUMBERS);

Pattern pattern = Pattern.compile("abc://\S*");

Linkify.addLinks(tv_multiHyperLink, pattern, "abc");

2.4 使用autoLink属性识别链接类型

当文字中现身了UENVISIONL,E-Mail,电话号码,地图的时候,大家得以因此设置autoLink属性;当大家点击 文字中对应部分的文字,就能够跳转至某默许APP,举例一串号码,点击后跳转至拨号界面!

新澳门葡京娱乐场下载 7

all正是成套都包罗,自动识别合同头~ 在Java代码中能够调用setAutoLinkMask(Linkify.ALL卡塔尔国; 当时能够不写公约头,autolink会自动识别,但是还要为这几个TextView设置: setMovementMethod(LinkMovementMethod.getInstance(卡塔尔(قطر‎State of Qatar; 不然点击了是没效果的!

参照他事他说加以考察链接##

textView 增添超链接android:TextView中的文本链接之--链接的二种方法

//依附SpannableString类达成超链接文字

tv_customMultiHyperLink = (TextView) findViewById(R.id.tv_customMultiHyperLink);

tv_customMultiHyperLink.setText(getClickableSpan());

//设置超链接可点击

tv_customMultiHyperLink.setMovementMethod(LinkMovementMethod.getInstance());

 

办法二:通过HTML格式化网站

  • 布局
 <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="15"/>
  • 代码
 String html = "有问题:n"; html  = "<a href='http://www.baidu.com'>百度一下</a>"; mTextView.setMovementMethod(LinkMovementMethod.getInstance; mTextView.setText(Html.fromHtml;
  • 示范效果

新澳门葡京娱乐场下载 8HTML格式化网址.gif

  • Tips1、在此之前方法一构造中的android:autoLink="all" 必需去掉,代码中也不能够应用mTextView.setAutoLinkMask(Linkify.ALL),否则识别不出去网址,也正是说两种方法切忌混着用。2、注意这里不可不抬高合同号,即http://。不然,系统会感觉该链接是activity,而实在这里个activity不设有,程序就夭亡。
FATAL EXCEPTION: mainProcess: com.bohe.coolweather, PID: 4519android.content.ActivityNotFoundException: No Activity found to handle Intent{ act=android.intent.action.VIEW dat=www.baidu.com (has extras) }

3、

mTextView.setMovementMethod(LinkMovementMethod.getInstance;

必需有地方这一句,不然识别不出超链接。setMovementMethod,此方法在急需响应客商事件时接纳,如点击一个电话号码就跳转到拨号页面。假设不实行这么些格局是不会响应事件的,即便文本看着已然是下划线字了。


2.7 达成跑马灯效果的TextView

落时间效益益图:

新澳门葡京娱乐场下载 9

代码完结:

<TextView
        android:id="@ id/txtOne"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="你整天说着日了狗日了狗,但是你却没有来,呵呵呵呵呵呵呵呵呵呵~"/>

当一段文字部分是超链接也许我们必要点击超链接跳到另二个Activity时,如什么地方理?答案依然用Spannable。

  • 代码
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView mTextView =  findViewById(R.id.text); //将TextView的显示文字设置为SpannableString mTextView.setText(getClickableSpan; //设置该句使文本的超连接起作用 mTextView.setMovementMethod(LinkMovementMethod.getInstance; } //设置超链接文字 private SpannableString getClickableSpan() { SpannableString spanStr = new SpannableString("使用该软件,即表示您同意该软件的使用条款和隐私政策"); //设置下划线文字 spanStr.setSpan(new UnderlineSpan(), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置文字的单击事件 spanStr.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { startActivity(new Intent(MainActivity.this, TestActivity1.class)); } }, 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置文字的前景色 spanStr.setSpan(new ForegroundColorSpan(Color.RED), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置下划线文字 spanStr.setSpan(new UnderlineSpan(), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置文字的单击事件 spanStr.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { startActivity(new Intent(MainActivity.this, TestActivity2.class)); } }, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置文字的前景色 spanStr.setSpan(new ForegroundColorSpan(Color.BLUE), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return spanStr; }
  • 示范效果

新澳门葡京娱乐场下载 10超链接跳到另二个Activity.gif

  • Tips1、设置文字的单击事件——此操作会私下认可给有单击效果的文字加上下划线和暗许颜色(具体颜色因大旨差异而各异); 理当如此,之所以会有暗中同意的颜色和下划线,是因为ClickableSpan类中的updateDrawState(TextPaint ds卡塔尔国那几个措施,假设您想去掉下划线只怕改动默许颜色,可重写该形式照旧选取2、3中的操作
 /** * Makes the text underlined and in the link color. */ @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText; }

2、设置下划线文字——此操作就是单纯给文字加下划线。3、设置文字的前程色——此操作正是改革文字的前途色。不过该操作和安装文字的单击事件,两个中,后实行的会覆盖先实施的同等字段的水彩,for example,先设置[16,30卡塔尔(قطر‎文字颜色是RED,后给[20,24卡塔尔文字设点击事件,那么[20,24卡塔尔(قطر‎的文字颜色会被暗中认可颜色覆盖,相像反之肖似。4、涉及到的常量解释

 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;//前后都不包括() Spanned.SPAN_EXCLUSIVE_INCLUSIVE;//前不包含后包含(] Spanned.SPAN_INCLUSIVE_EXCLUSIVE;//前包含后不包含[) Spanned.SPAN_INCLUSIVE_INCLUSIVE;//前后都包含[]

case com.android.internal.R.styleable.TextView_autoLink:

mAutoLinkMask = a.getInt(attr, 0);

break;

2.5 TextView玩转HTML

如题,除了展现普通文书外,TextView还预约义了一部分看似于HTML的竹签,通过那一个标签,大家得以使 TextView呈现分化的字体颜色,大小,字体,以致是显得图片,大概链接等!大家只要采纳HTML中的一些 标签,加上android.text.HTML类的接济,就可以产生上述意义!

PS:当然,并不是支撑具备的竹签,常用的有下述这么些:

  • <font>:设置颜色和字体。
  • <big>:设置字体大号
  • <small>:设置字体大号
  • <i><b>:斜体粗体
  • <a>:连接网站
  • <img>:图片

如果直白setText的话是没效果的,大家需求调用Html.fromHtml(卡塔尔国方法将字符串调换为CharSequence接口, 然后再进行安装,若是大家供给相应设置,需求为TextView进行安装,调用下述方法: Java setMovementMethod(LinkMovementMethod.getInstance())

啊,接着大家写代码来试试看:

1)测量试验文本与超链接标签

package jay.com.example.textviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView)findViewById(R.id.txtOne);
        String s1 = "<font color='blue'><b>百度一下,你就知道~:</b></font><br>";
        s1  = "<a href = 'http://www.baidu.com'>百度</a>";
        t1.setText(Html.fromHtml(s1));
        t1.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

2)测量试验src标签,插入图片:

看下运营效果图:

新澳门葡京娱乐场下载 11

接下去看下实今世码,实今世码看上去有个别复杂,用到了反光(对了,别忘了在drawable目录下放两个icon的图纸哦!State of Qatar:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView) findViewById(R.id.txtOne);
        String s1 = "图片:<img src = 'icon'/><br>";
        t1.setText(Html.fromHtml(s1, new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String source) {
                Drawable draw = null;
                try {
                    Field field = R.drawable.class.getField(source);
                    int resourceId = Integer.parseInt(field.get(null).toString());
                    draw = getResources().getDrawable(resourceId);
                    draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return draw;
            }
        }, null));
    }
}

2)自定义链接

新澳门葡京娱乐场下载 12

/**

* 获取可点击的SpannableString

* @return

*/

private SpannableString getClickableSpan() {

SpannableString spannableString = new SpannableString("使用该软件,即意味着您同意该软件的接纳条目和隐秘政策"卡塔尔(قطر‎;

//设置下划线文字

spannableString.setSpan(new UnderlineSpan(), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//设置文字的单击事件

spannableString.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

Toast.makeText(MainActivity.this,"使用条约",Toast.LENGTH_SHORT).show();

}

}, 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//设置文字的前途色

spannableString.setSpan(new ForegroundColorSpan(Color.RED), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//设置下划线文字

spannableString.setSpan(new UnderlineSpan(), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//设置文字的单击事件

spannableString.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

Toast.makeText(MainActivity.this,"隐秘政策",Toast.LENGTH_SHORT).show();

}

}, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//设置文字的前途色

spannableString.setSpan(new ForegroundColorSpan(Color.RED), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

return spannableString;

}

虽说经过设置autoLink属性可以顺应格式的文本调换为可单击的超链接方式,但是,有几许急需潜心的是,当点击web地址时展开后跳转的是手提式有线电电话机自带的浏览器,假使期待点击web地址时能够跳转到应用自己的叁个WebView分界面,那么那时又该如何落到实处呢?借使不晓得怎么贯彻的话,我们得以点击TextView进去查看一下TextView的源码看一下autoLink的是哪些兑现的,通过ctrl f查找autoLink能够窥见如下代码:

3、Email:表示非常邮件地址:如:邮件地址为hello@com.cn会成为可单击的超链接;

对TextView属性相比较熟练的开采者应该都知晓TextView有贰个叫做autoLink的品质能够将切合钦命格式的文件转变为可单击的超链接格局,在援助文档中也得以开掘Android给大家提供了如下二种格式:

6、All:表示将会相称web、email、phone、map;

在CustomUrlSpan类的onClick方法中展开跳转时用到的WebViewActivity代码这里就不再贴出来,重要就是四个用来加载网页的WebView,借使有必要的能够在作品最终下载源码查看;

延续通过ctrl f查找mAutoLinkMask变量能够窥见setText方法中宛如下代码:

本来,我们也能够由此这种措施达成地点所实现的阻拦超链接的效益,这里就不再详细表明了,别的,当多少个TextView即必要使用内置形式又供给利用自定义方式时必需先注解内置形式然后再声称自定义形式,并且经测验开采:无法在xml构造文件中通过autoLink属性来声称内置形式,不然自定义形式不起功效,听他们说是因为:在安装内置形式时会先删除已有个别情势,那么那时就只可以通过在代码中设置了,首要代码如下所示:

运作程序后能够窥见唯有首先种的写法本事被Html的fromHtml方法格式化为超链接,如下所示:

1)拦截超链接

只要大家对内部的其余措施比较感兴趣的话也足以一一点击步向查六柱预测应的兑现,作者这里就不再一一介绍了,额,貌似某个扯远了,大家回到正题,由此可以看到在通过一雨后冬笋的阅读跟TextView相关的源码和支持文档后,开采大家能够透过依赖Spannable来收获UEscortLSpan数组然后能够由此遍历获取具备的url地址,最终通过给Spannable设置自定义的ClickableSpan来实行跳转,MainActivity的重视代码如下所示:

4、Phone:表示极其电话号码:如:点击号码10086会跳到拨号分界面;

新澳门葡京娱乐场下载 13

本文由新浦京81707con发布于注册购买,转载请注明出处:Android学习笔记,Android如何通过TextView实现超链接

关键词: 新浦京81707con Android Android知识 超链接 TextView

上一篇:Nginx模块开发,SeaJS入门教程系列之SeaJS介绍_Sea

下一篇:没有了