看到一篇说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,然后做相关处理!
相关推荐
总的来说,Android的图文混排可以通过`TextView`结合`SpannableString`和`ImageSpan`,或使用`WebView`加载HTML内容来实现。选择哪种方法取决于应用场景和需求的复杂程度。在实际开发中,还需要考虑性能优化,比如...
spannableText.setSpan(new GradientTextSpan(gradient), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 将spannableText设置给TextView textView.setText(spannableText); ``` 通过上述步骤,我们成功地...
在这个"Android textView应用简单示例"中,我们将深入探讨TextView的基本用法及其在实际开发中的应用。 1. **TextView的声明与使用** 在XML布局文件中,TextView通过`<TextView>`标签来声明。基本结构如下: ```...
在Android开发中,实现文字与图片的混排是一项常见的任务,尤其在UI设计中,图标经常需要与...在处理多行文本和复杂布局时,`SpannableString`和`ImageSpan`通常是最佳选择,它们能提供足够的灵活性来满足各种需求。
下面是一个简单的示例,展示了如何在`EditText`中使用`ImageSpan`替换图片: ```java // 假设已从数据库获取到图片的Bitmap Bitmap bitmap = getBitmapFromDatabase(); Drawable drawable = new BitmapDrawable...
在`android-text`项目中,我们可能会看到各种`TextView`的用法和定制。 1. **样式和格式化**:Android支持使用HTML样式的字符串资源,允许在XML布局文件中使用`<b>`、`<i>`、`<u>`等标签进行文本样式设置。此外,`...
在提供的文件“android设置TextView中文字不同的字体大小且垂直居中显示”中,可能包含了一个示例代码或详细步骤,可以帮助开发者更深入地理解这一技术。建议查看该文件以获取更多实践指导。记住,实践中学习和掌握...
总结来说,Android的TableLayout布局提供了一种灵活的方式来构建二维的UI结构,通过调整不同的属性,可以实现各种复杂的表格布局效果。通过理解并熟练运用这些属性,开发者可以更好地满足用户界面的需求,创建出清晰...
- **示例**:`android:layout_span="2"` 表示控件占据2列。 #### 四、Android 相对布局(RelativeLayout)常用属性 **RelativeLayout** 是一种灵活的布局方式,允许控件相对于其他控件或其父容器进行定位。 ####...
SpannableString允许在字符串中插入各种Span对象,ImageSpan是其中一种,用于将图片插入到字符串中,可以实现文字环绕图片的效果。 3. LayoutParams与相对布局:在Android中,可以使用RelativeLayout来控制元素的...
这篇文档将深入探讨如何在Android中实现TextView的各种常见效果,包括通过HTML设置样式、添加点击事件、实现跑马灯效果以及在TextView中展示图片。 一、HTML设置样式 在Android的TextView中,我们可以使用`...
总的来说,`TextView` 的 `Span` 功能为开发者提供了丰富的文本操作可能性,通过自定义 `Span` 和监听器,我们可以完全定制文本的行为,以满足各种交互需求。在实际开发中,这是一项非常实用的技术。
6. **兼容性处理**:考虑到Android系统的版本差异,富文本组件需要处理各种兼容性问题,确保在不同版本的Android上都能正常工作。 在`RichEditText-master`这个项目中,开发者可能已经实现了一个完整的富文本编辑器...
在`StylingAndroid-Rialto-13d0eb0`这个压缩包中,包含了`Rialto`库的源码和示例项目。你可以通过查看这些代码深入了解`Rialto`的工作原理,并学习如何在自己的项目中有效利用它。 总结来说,`Rialto`为Android...
本示例“android text style设置”着重于如何在TextView中对特定部分的文本进行样式定制,如改变颜色、设置加粗、调整背景色、修改字体大小、添加下划线或删除线等。下面将详细解释这些知识点,并通过`...
总之,通过使用SpannableString和ImageSpan,我们可以灵活地在Android的TextView中插入图片,实现文字与图片的混排,提升应用的UI表现。在实际开发中,可以结合自定义View或使用第三方库如`DynamicDrawableSpan`或`...
通过组合使用各种Span子类,我们可以轻松实现文本的样式变化、颜色调整、大小调整甚至添加交互性(如超链接)。了解并熟练运用SpannableString,可以极大地提升应用的用户体验,使文本更具吸引力和功能性。
3. `android:layout_span`属性可以用来指定一个单元格跨越的列数。 **四、动态创建表格** 在代码中动态创建TableLayout和TableRow,可以根据数据源动态生成表格,适应不同数量和结构的数据。以下是一个简单的示例:...
SpannableString是Spannable的一个具体实现,它是一个不可变的字符串,我们可以向其中添加各种Span对象来改变文本的样式。例如,我们可以通过以下方式设置TextView中某段文字的颜色: ```java TextView textView =...