昨晚研读 ApiDemo 源码至 com.example.android.apis.text.Link 类。首先,看一下其运行效果:
要给 TextView 加上效果,方式主要有几种:
- 第一种,自动应用效果,使用 android:autolink 属性,如:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:autoLink="all"
android:text="@string/link_text_auto"
/>
<string name="link_text_manual"><b>text2:</b> This is some other
text, with a <a href="http://www.google.com">link</a> specified
via an <a> tag. Use a \"tel:\" URL
to <a href="tel:4155551212">dial a phone number</a>
</string>
- 第三种,和第二种其实是一样的,只不过将文本改在 JAVA 代码中,如:
TextView t3 = (TextView) findViewById(R.id.text3);
t3.setText(
Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=\"http://www.google.com\">link</a> " +
"created in the Java source code using HTML."));
t3.setMovementMethod(LinkMovementMethod.getInstance());
- 第四种,前面三种可以说都是自动的,而第四种就是纯“手工”的了。通过创建 SpanableString 字符串,并在之上创 建一个或多个 Span 来实现丰富的效果。例子如下:
SpannableString ss = new SpannableString("text4: Click here to dial the phone.");
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new URLSpan("tel:4155551212"), 13, 17,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView t4 = (TextView) findViewById(R.id.text4);
t4.setText(ss);
t4.setMovementMethod(LinkMovementMethod.getInstance());
完整的代码见 ApiDemo 吧,下面我提几点需要注意的:
- setMovementMethod,此方法在需要响应用户事件时使用,如点击一个电话号码就跳转到拨号页面。如果不执行这个方法是不会响应事件的,即便文本看着已经是下划线蓝色字了。
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,这是在 setSpan 时需要指定的 flag,它的意义我试了很久也没试出来,睡个觉,今天早上才突然有点想法,试之,果然。它是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)。看个截图就更明白了:
对比一下
- 大小: 23 KB
- 大小: 4.2 KB
- 大小: 5.4 KB
分享到:
相关推荐
我们知道UITextField属于UIControl的,该效果就是解决了这个问题,支持给UITextField加上target action效果,主要采用了addTarget 方法实现的,而UITextView不是UIControl,所以没有 addTarget 方法,所以要响应输入...
为了响应用户点击或者长按事件,我们需要为GridView添加`.setOnItemClickListener()`或`.setOnItemLongClickListener()`。在监听器中,我们可以获取点击或长按的Item的位置,进而执行相应的业务逻辑。 5. **自定义...
4. **测试和优化**:在不同的设备和Android版本上测试ListView的展示效果和性能,根据反馈进行优化。 ### ListView的定制和功能实现 文件内容中的代码示例显示了ListView的布局是如何通过XML文件来定义的。我们可以...
3. **自定义TitleBar**:正如描述中所述,开发者可以创建自己的XML布局,包含TextView(展示标题)、ImageView(展示图标)和其他按钮等,然后在需要的地方通过Java代码或者Kotlin DSL进行注入和设置。这种方式的...
在Android应用开发中,自定义ListView是常见的需求,特别是在创建具有独特交互和视觉效果的界面时,如微信或QQ的设置界面。这个“android自定义listview实现仿微信/QQ设置界面demo”就是一个实例,旨在教你如何打造...
- 倒计时应用:通过设置Chronometer的起始时间为当前时间加上目标秒数,然后启动,达到倒计时效果。 - 运动计时:在运动应用中,启动Chronometer记录运动过程中的时间,提供实时反馈。 7. **注意事项** - 由于...
3. **触摸事件处理**:若需响应触摸事件,需重写`onTouchEvent()`,并正确处理MotionEvent。 4. **性能优化**:避免在`onDraw()`中执行耗时操作,使用`View.postInvalidate()`或`View.invalidate()`异步刷新,减少...
这部分空间将被第二个和第三个`TextView`均分,所以它们的最终宽度是10dip(内容宽度)加上225dip(由`layout_weight`分配的空间),即235dip。 现在,我们将`Layout_weight`应用于`ListView`来实现表格效果。在...
- 示例: `tv_main_title` (TextView) **5. Activity中的View命名** - 采用逻辑名称加上视图缩写的格式。 - 示例: `titleTv` - 复杂布局建议按模块划分,使用`ViewHolder`模式。 **6. Strings.xml ID命名** - ...
`one.xml` 显示文本 "this is linearLayout one",而 `two.xml` 显示文本 "this is linearLayout two" 加上一个按钮。 2. **代码实现**: 在Android的Activity中,我们需要监听按钮的点击事件,并根据用户的选择...