`
zhiweiofli
  • 浏览: 515448 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

TextView的日常使用技巧

阅读更多

    Textview在日常开发工作中使用非常频繁,在这里简单总结一下其比较重要的用法。目标是设置textview的中一段文字的显示属性,例如指定文字要下划线显示(@XXX、#XXX#),文字替换成图片,文字加重、变色、变大等。

实现的基本思路都是将指定的文字找出来,然后用实现Spananble接口的子类覆盖,即可。
    Spananble只是一个接口,它的继承关系是:Spananble->Spanned->CharSequence 
     因为Spannable继承于CharSequence接口,因而,TextView可以直接setText,Spannable的实现类:Editable, SpannableString, SpannableStringBuilder 。
    Spannable中有提供public abstract void setSpan (Object what, int start, int end, int flags) 方法,来设置被替换部分要显示的样式
    其中参数Object what 又必须是 android.text.style.CharacterStyle 的实现子类,就是它决定显示的样式,例如实现下划线的UrlSpan,实现改变字体颜色的ForegroundColorSpan,实现改变字体大小的AbsoluteSizeSpan,实现替换成图片的ImageSpan等。下面我会总结几种常用的用法: 

 

    1、改变文字的大小以及颜色:
String str = "This is testing text!"
int start =str.indexOf("testing");
int end = start + "testing ".length();
SpannableStringBuilder style = new SpannableStringBuilder(str);
int size = 20;  //20px
style.setSpan(new AbsoluteSizeSpan(size), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
int color = 0xff0000; //设置指定位置文字的颜色 
style.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      
...

textView.setText(style);
    2、实现多字符串的动态处理:
string.xml:
<string name="testing">这是一个数字:%1$d, 这是两位数字:%2$d,这又是成都为3的字符串:%3$s</string>
String text = String.format(getResources().getString(R.string.testing), 1, 22, "三个字");

 int index[] = new int[3];  
 index[0] = text.indexOf("1");  
 index[1] = text.indexOf("22");  
 index[2] = text.indexOf("三个字");  
  
 SpannableStringBuilder style=new SpannableStringBuilder(text);     
 style.setSpan(new ForegroundColorSpan(Color.RED),index[0],index[0]+1,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      
 style.setSpan(new ForegroundColorSpan(Color.RED),index[1],index[1]+2,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      
 style.setSpan(new BackgroundColorSpan(Color.RED),index[2],index[2]+3,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      
 textView.setText(style);
    在项目开发中,我们经常需要把多个字符串进行拼接,用上面的方式处理,并结合起来使用,可以避免很多Textview的拼接!

 

    3、实现超链接效果:
    第一种简单做法:当文字中出现URL、E-mail、电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,也可以是所有的类型都都响应:android:autoLink="all",最后在java代码里,对指定的textView.setAutoLinkMask(Linkify.ALL); 
    第二种自定义做法:尽管第一种做法简单,但都是默认调用,不能自定义跳转,像微博的@XXX ,#XXX#这类的特殊文字的响应,需要指定处理的视图。我们一般可以这样子实现:
    (1)我们先指定特定字符串响应点击:
SpannableStringBuilder style = new SpannableStringBuilder("call: 110");  
style.setSpan(new StyleSpan(Typeface.BOLD), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
style.setSpan(new URLSpan("110"), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
textView.setText(style);  
textView.setMovementMethod(LinkMovementMethod.getInstance());
    (2)更改响应点击的方式:
     URLSpan是我们常用的文字超链接控件,但是默认都会自带下划线,并不是太美观。有官方API文档可知,URLSpan继承自 ClickableSpan  , 因而我们可以通过继承 ClickableSpan   并重写其实现的方法,即可实现自定义跳转控制,以及外观样式的控件了。
public class URLSpanNoUnderline extends ClickableSpan {
    private final String mURL;
    public URLSpanNoUnderline(String url) {
        mURL = url;
    }

    public String getURL() {
        return mURL;
    }

    @Override
    public void onClick(View widget) {
        Uri uri = (Uri) widget.getTag();
        if(uri!=null) {
            final Context context = widget.getContext();
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
            context.startActivity(intent);
        }
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);  //取消下划线
        ds.setColor(0xff0066ff);     //指定文字颜色
        //ds.setTextSize(ds.getTextSize()*1.1F);
    }
}
    (3)实现响应:
     我们通过设置Intent的Action---- Intent.ACTION_VIEW,并指定携带的Data是uri,那么我们就可以在程序中,实现响应该Action和Data意图的Activity:
      <activity
            android:name=".activity.XXXActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="_host"
                    android:scheme="_scheme" />
            </intent-filter>
        </activity>
    (4)最后是自定义Uri
     uri一般由scheme和host,就像http的url一样,http://www.google.com,其scheme是http,host就是www.google.com,二者结合就可定位到某一位置。uri也一样,当然带参数也是可以的,例如:my_scheme://my_host?param=www.google.com。
     总结一下,通过重写实现 ClickableSpan  接口,并自定义Uri,即可使其 响应 导向指定的activity进行。
     未完待续...

    本文由zhiweiofli编辑发布,转载请注明出处,谢谢。

 

0
0
分享到:
评论

相关推荐

    Android实现TextView文字滚动.zip

    在Android开发中,TextView是用于显示单行或多行文本的视图组件,它是我们日常开发中最常用的基础控件之一。然而,当TextView中的文本内容超出显示区域时,我们有时需要实现文本的滚动效果,以便用户可以查看全部...

    自定义TextView

    在Android开发中,`TextView`是用于显示文本的基本视图组件。它是我们日常应用界面中最..."自定义TextView.zip"中的"JustifiedTextView-master"项目提供了一个很好的学习示例,帮助开发者掌握自定义视图的方法和技巧。

    Android实战技巧-v1.11

    这些技巧都是Android开发者在日常工作中可能会遇到的问题,掌握它们能提高代码的可读性和用户体验。后续章节如“组合控件”和“persistableMode与Activity的持久化”等,将涉及更多高级主题和实践方法,帮助开发者...

    应用源码之TextViewSample.zip

    此外,对于初学者,通过分析TextViewSample项目,可以学习到如何在实际项目中使用TextView,包括设置动态文本、处理用户输入、使用SpannableString进行富文本显示等实践技巧。同时,这也有助于理解和掌握Android的...

    集成了各个常用控件、工具类、Json数据解析、网络请求等,并有使用列子

    【描述】中提到,这个资源可能是某个开源项目,包含了上述功能的实现,并且有使用示例,这对于初学者来说非常有帮助,可以通过查看源码学习到实际应用中的编程技巧和最佳实践。 【标签】"android源码"表明这是一个...

    IOS 开发总结

    - 常用方法:分享了一些有用的iOS开发技巧,例如如何使图片拉伸后不模糊,如何使用自定义字体等。 - 后台运行:讨论了iOS应用后台运行的机制和限制。 - UITableView和UITableViewCell的高级使用:包括如何自定义...

    Android Studio实现简单的QQ登录界面的示例代码

    QQ是我们日常生活使用最多的软件之一,包含登录界面和进入后的聊天界面、好友列表界面和空间动态界面等。登录界面的制作比较简单,主要考验布局的使用,是实现QQ项目的第一步。现在APP开发的首要工作都是实现登录...

    Android项目源码粗仿饿了么的外卖APP源码.rar

    这涉及到对各种布局(如LinearLayout、RelativeLayout、ConstraintLayout)的理解和灵活运用,以及对控件(TextView、ImageView、Button等)的属性设置,包括尺寸、颜色、字体等。此外,适配不同屏幕尺寸和方向的...

    Android应用源码仿高仿91熊猫看书小说阅读器.zip

    在移动设备上,阅读应用已经成为用户日常生活中不可或缺的一部分。本篇将深入探讨一款基于Android平台的仿91熊猫看书小说阅读器的源码,帮助开发者理解和学习如何构建一个高效、用户体验优秀的阅读应用。 首先,...

    Android程序研发源码Android 随手记记账应用源码.rar

    - 使用`XML`布局文件来定义界面元素,如TextView、EditText、Button等,通过`findViewById()`方法在Java代码中获取引用。 - 数据绑定和事件监听,例如点击事件,用于触发记账功能。 3. **数据存储**: - 可能...

    Android电子教案

    2. **改变屏幕窗口元素的背景颜色**:可以在`TextView`组件中使用`setBackgroundDrawable()`方法来设置背景颜色。 3. **改变TextView的文字颜色**:同样使用`setTextColor()`方法来设置文字颜色。 4. **实现TextView...

    Android 典型技术模块开发详解 pdf

    3. **UI设计**:XML布局文件的编写,包括各种视图元素(如TextView、ImageView、Button等)的使用,以及Layout Manager(线性布局、相对布局、网格布局等)的应用。此外,还会涉及自定义View和手势识别。 4. **...

    Android基础教程(八)之-AutoCompleteTextView的应用

    在日常生活中,我们经常使用搜索引擎如百度或谷歌来查找信息。当我们开始输入关键词时,这些搜索引擎会智能地提供一些与输入词相关的建议,从而帮助我们更快地找到所需的信息。这种功能在移动应用开发中同样非常重要...

    XX大学计算机实习总结.pdf

    UI编程中,学习了TextView标签的使用和颜色值的定义,如在android.graphics.color包中的应用。实习经历让实习生意识到,知识学习应由浅入深,不断积累。 在找工作的过程中,实习生遇到了挫折,意识到自我定位和实际...

    android SDK 10进制2进制转换器

    可以使用EditText控件接收输入,Button触发转换,TextView显示结果。在Button的OnClickListener中执行上述代码逻辑。 此外,你还可以扩展这个转换器,支持其他进制(如8进制、16进制)的转换。例如,使用Integer的...

    EditText默认提示颜色和输入变色

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的文字。默认情况下,`EditText` 的提示文本(hint)颜色较淡...这些技巧在日常的Android应用开发中非常实用,能帮助开发者实现更丰富的交互效果。

    应用源码之仿UCWEB界面源码.zip

    通过对仿UCWEB界面的源码进行分析,我们可以学习到许多关于Android UI设计、事件处理、网络请求以及数据解析的关键技巧。 首先,源码中的关键组件和布局设计是学习的重点。在Android中,XML布局文件定义了用户界面...

    原生App开发入门教程.txt

    随着移动互联网技术的快速发展,智能手机成为人们日常生活中不可或缺的一部分。为了满足不同用户的需求,各类应用程序(App)应运而生。根据开发方式的不同,App可以分为原生App、Web App以及混合型App等类型。其中...

    Android应用源码之BOOK看遍所有UI控件_UI.zip

    源码可能包含GestureDetector和ScaleGestureDetector等类的使用,让你掌握手势识别的技巧。 10. **无障碍服务**:源码可能还包括对无障碍功能的支持,如TalkBack,这对于确保应用的可访问性非常重要。 通过深入...

    安卓虎苗锁屏带回弹效果.zip

    在锁屏状态下,该应用能够清晰地展示当前的时间、日期以及星期,提升用户的日常使用便利性。 在这个【安卓源码-其他应用】的标签下,我们可以深入探讨这款应用的技术实现和相关知识点。 首先,Android应用程序主要...

Global site tag (gtag.js) - Google Analytics