`
wangleyiang
  • 浏览: 220107 次
社区版块
存档分类
最新评论

Android 各种Span示例

阅读更多

看到一篇说Span的文章,留做备用,来源:http://orgcent.com/android-textview-spannablestring-span/

import android.app.Activity;
import android.graphics.BlurMaskFilter;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.Rasterizer;
import android.graphics.Typeface;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.DynamicDrawableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.MaskFilterSpan;
import android.text.style.RasterizerSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ScaleXSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;

public class SpanTestActivity extends Activity {
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView displayText = (TextView) findViewById(R.id.display);
        
        // BackgroundColorSpan
        SpannableString spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);;
        displayText.append(spanText);
        
        // ForegroundColorSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // MaskFilterSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        int length = spanText.length();
        //模糊(BlurMaskFilter)
        MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
        spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable.
        SPAN_INCLUSIVE_EXCLUSIVE);
        //浮雕(EmbossMaskFilter)
        maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
        spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // RasterizerSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new RasterizerSpan(new Rasterizer()), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // StrikethroughSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // UnderlineSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new UnderlineSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // AbsoluteSizeSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // DynamicDrawableSpan
        DynamicDrawableSpan drawableSpan = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
            @Override
            public Drawable getDrawable() {
                Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
                d.setBounds(0, 0, 50, 50);
                return d;
            }
        };
        DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) {
            @Override
            public Drawable getDrawable() {
                  Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
                  d.setBounds(0, 0, 50, 50);
                        return d;
                    }
                };
        spanText.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        spanText.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // ImageSpan
        spanText = new SpannableString("吾将上下而求索 -- http://google.com");
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
        d.setBounds(0, 0, 50, 50);
        spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        displayText.append("\n");
        displayText.append(spanText);
        
        // RelativeSizeSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		// 参数proportion:比例大小
		spanText.setSpan(new RelativeSizeSpan(2.5f), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// ScaleXSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		//参数proportion:比例大小
		spanText.setSpan(new ScaleXSpan(3.8f), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// StyleSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		//Typeface.BOLD_ITALIC:粗体+斜体
		spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// SubscriptSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		spanText.setSpan(new SubscriptSpan(), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// SuperscriptSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		spanText.setSpan(new SuperscriptSpan(), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// TextAppearanceSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		//若需自定义TextAppearance,可以在系统样式上进行修改
		spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// TypefaceSpan
		spanText = new SpannableString("吾将上下而求索 -- http://google.com");
		//若需使用自定义字体,可能要重写类TypefaceSpan
		spanText.setSpan(new TypefaceSpan("monospace"), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		
		// URLSpan
		spanText = new SpannableString("吾将上下而求索 -- GOOGLE");
		spanText.setSpan(new URLSpan("http://google.com"), 10, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
		displayText.append("\n");
		displayText.append(spanText);
		//让URLSpan可以点击
		displayText.setMovementMethod(new LinkMovementMethod());
        
    }
    
}

 

效果图片:



 

 多说一句:当开发中需要做一些特殊操作时,可以考虑继承以上合适的Span,然后做相关处理!

 

 

 

  • 大小: 27.8 KB
分享到:
评论

相关推荐

    android图文混排示例

    总的来说,Android的图文混排可以通过`TextView`结合`SpannableString`和`ImageSpan`,或使用`WebView`加载HTML内容来实现。选择哪种方法取决于应用场景和需求的复杂程度。在实际开发中,还需要考虑性能优化,比如...

    android TextView 文字部分渐变

    spannableText.setSpan(new GradientTextSpan(gradient), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 将spannableText设置给TextView textView.setText(spannableText); ``` 通过上述步骤,我们成功地...

    Android textView应用简单示例.zip

    在这个"Android textView应用简单示例"中,我们将深入探讨TextView的基本用法及其在实际开发中的应用。 1. **TextView的声明与使用** 在XML布局文件中,TextView通过`<TextView>`标签来声明。基本结构如下: ```...

    android中文字和图片混排效果的实现

    在Android开发中,实现文字与图片的混排是一项常见的任务,尤其在UI设计中,图标经常需要与...在处理多行文本和复杂布局时,`SpannableString`和`ImageSpan`通常是最佳选择,它们能提供足够的灵活性来满足各种需求。

    imageSpan图片替换

    下面是一个简单的示例,展示了如何在`EditText`中使用`ImageSpan`替换图片: ```java // 假设已从数据库获取到图片的Bitmap Bitmap bitmap = getBitmapFromDatabase(); Drawable drawable = new BitmapDrawable...

    android-text,演示如何在android上使用文本的示例.zip

    在`android-text`项目中,我们可能会看到各种`TextView`的用法和定制。 1. **样式和格式化**:Android支持使用HTML样式的字符串资源,允许在XML布局文件中使用`<b>`、`<i>`、`<u>`等标签进行文本样式设置。此外,`...

    android设置TextView中不同的文字字体大小且垂直居中显示

    在提供的文件“android设置TextView中文字不同的字体大小且垂直居中显示”中,可能包含了一个示例代码或详细步骤,可以帮助开发者更深入地理解这一技术。建议查看该文件以获取更多实践指导。记住,实践中学习和掌握...

    Android 表格布局TableLayout示例详解

    总结来说,Android的TableLayout布局提供了一种灵活的方式来构建二维的UI结构,通过调整不同的属性,可以实现各种复杂的表格布局效果。通过理解并熟练运用这些属性,开发者可以更好地满足用户界面的需求,创建出清晰...

    android 布局属性大总结

    - **示例**:`android:layout_span="2"` 表示控件占据2列。 #### 四、Android 相对布局(RelativeLayout)常用属性 **RelativeLayout** 是一种灵活的布局方式,允许控件相对于其他控件或其父容器进行定位。 ####...

    Android 图文混排 ,文字围绕图片

    SpannableString允许在字符串中插入各种Span对象,ImageSpan是其中一种,用于将图片插入到字符串中,可以实现文字环绕图片的效果。 3. LayoutParams与相对布局:在Android中,可以使用RelativeLayout来控制元素的...

    Android中TextView的常用效果实现

    这篇文档将深入探讨如何在Android中实现TextView的各种常见效果,包括通过HTML设置样式、添加点击事件、实现跑马灯效果以及在TextView中展示图片。 一、HTML设置样式 在Android的TextView中,我们可以使用`...

    textview span

    总的来说,`TextView` 的 `Span` 功能为开发者提供了丰富的文本操作可能性,通过自定义 `Span` 和监听器,我们可以完全定制文本的行为,以满足各种交互需求。在实际开发中,这是一项非常实用的技术。

    Android--EditText的富文本组件

    6. **兼容性处理**:考虑到Android系统的版本差异,富文本组件需要处理各种兼容性问题,确保在不同版本的Android上都能正常工作。 在`RichEditText-master`这个项目中,开发者可能已经实现了一个完整的富文本编辑器...

    Android-Rialto是一个基于AnnotationSpans的Android文本样式库

    在`StylingAndroid-Rialto-13d0eb0`这个压缩包中,包含了`Rialto`库的源码和示例项目。你可以通过查看这些代码深入了解`Rialto`的工作原理,并学习如何在自己的项目中有效利用它。 总结来说,`Rialto`为Android...

    android text style设置

    本示例“android text style设置”着重于如何在TextView中对特定部分的文本进行样式定制,如改变颜色、设置加粗、调整背景色、修改字体大小、添加下划线或删除线等。下面将详细解释这些知识点,并通过`...

    安卓textView相关-Androidtextview文字中间加上图片.rar

    总之,通过使用SpannableString和ImageSpan,我们可以灵活地在Android的TextView中插入图片,实现文字与图片的混排,提升应用的UI表现。在实际开发中,可以结合自定义View或使用第三方库如`DynamicDrawableSpan`或`...

    android的可变字符串使用例子

    通过组合使用各种Span子类,我们可以轻松实现文本的样式变化、颜色调整、大小调整甚至添加交互性(如超链接)。了解并熟练运用SpannableString,可以极大地提升应用的用户体验,使文本更具吸引力和功能性。

    Android 表格实现

    3. `android:layout_span`属性可以用来指定一个单元格跨越的列数。 **四、动态创建表格** 在代码中动态创建TableLayout和TableRow,可以根据数据源动态生成表格,适应不同数量和结构的数据。以下是一个简单的示例:...

    Android 设置textview某段字体颜色或者背景

    SpannableString是Spannable的一个具体实现,它是一个不可变的字符串,我们可以向其中添加各种Span对象来改变文本的样式。例如,我们可以通过以下方式设置TextView中某段文字的颜色: ```java TextView textView =...

Global site tag (gtag.js) - Google Analytics