前言

  此篇博客是记录一些TextView开发上一些少用的开发功能项.目前开发记录如下:

  •   添加图片
  •   文字滚动
  •   添加省略号
  •   实现长文的收起和展开功能
  •   改变一个字符串里自定字符的颜色或者大小

效果字体(粗体/斜体/下划线)

增加效果字体的方法有很多既可以在xml属性里设置,又可以在代码里设置.(这里我们除了不演示使用SpannableString实现方式,都会演示一下)

xml里设置粗体

android:textStyle="bold"

 <TextView
android:id="@+id/html5_test"
android:gravity="start"
android:text="测试文本"
android:textSize="17sp"
android:textStyle="bold"
android:layout_width="200dp"
android:layout_height="50dp" />

xml里设置斜体

android:textStyle="italic"

<TextView
android:id="@+id/html5_test"
android:gravity="start"
android:text="测试文本"
android:textSize="17sp"
android:textStyle="italic"
android:layout_width="200dp"
android:layout_height="50dp" />

代码里实现粗体/斜体/下划线/中划线

这是实现方式其实就是获取TextView绘制文字的paint,通过改变paint的配置.达到改变文字效果

粗体

   TextView textView = findViewById(R.id.text_view);
TextPaint paint = textView.getPaint();
paint.setFakeBoldText(true);

下划线/中划线

textView1.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//中划线
textView1.getPaint().setAntiAlias(true); //去掉锯齿
textView2.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线

添加图片

 <!--TextView 放入图片例子-->
<!--android:drawableTop="@drawable/icon1" 在文字上面放入图片-->
<!--android:drawablePadding="20dp" 设置图片与文字之间的间隔-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="努力学习"
android:textColor="#0000ff"
android:textSize="50sp"
android:drawableTop="@drawable/icon1"
android:drawablePadding="20dp"/>

代码里添加图片

            Drawable drawable = context.getDrawable(R.drawable.ic_selection);
drawable.setBounds(,,drawable.getMinimumWidth(),drawable.getMinimumHeight());
itemName.setCompoundDrawables(null, null, drawable, null);

这里说明一下getDrawable的Drawable是没有大小尺寸的需要自己重新设定。如果不明白参考:https://www.cnblogs.com/guanxinjing/p/11249427.html

文字滚动

  <!--设置有滚动播放效果的文字显示-->
<!--android:singleLine="true" 设置单行-->
<!--android:marqueeRepeatLimit="marquee_forever" 设置滚动次数,这里为永久滚动-->
<!--android:ellipsize="marquee" ellipsize意思省略位置,marquee的意思是滚动模式-->
<!--android:focusable="true" 意思可聚焦,被选中。只有聚焦的文字才会滚动-->
<!--android:focusableInTouchMode="true" 可调焦的触摸模式-->
<!--注意此方法设置文字滚动,一个页面只有一段文字可以被预设聚焦并且滚动-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main4Text1"
android:layout_marginTop="30dp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"/>

添加省略号

android:maxLines="2"
android:ellipsize="end"

获取光标框选文本的位置

int start = mTextView.getSelectionStart();
int end = mTextView.getSelectionEnd();

实现长文的收起和展开功能

关键一  在TextView里面的getLayout方法

/**
* Gets the {@link android.text.Layout} that is currently being used to display the text.
* This value can be null if the text or width has recently changed.
* @return The Layout that is currently being used to display the text.
*/
public final Layout getLayout() {
return mLayout;
}

关键二  在Layout里的getEllipsisCount方法

 /**
* Returns the number of characters to be ellipsized away, or 0 if
* no ellipsis is to take place.
*/
public abstract int getEllipsisCount(int line);

使用方式

//获取省略的字符数,0表示没省略
int ellipsisCountholder = textView.getLayout().getEllipsisCount(holder.content.getLineCount()-1);

注意,TextView还在初始化的时候getLayout()可能会返回null,所以需要在TextView初始化测绘完成后获取.如下:

holder.content.post(new Runnable() {
@Override
public void run() {
//获取省略的字符数,0表示没和省略
int ellipsisCountholder = holder.content.getLayout().getEllipsisCount(holder.content.getLineCount()-1);
if (ellipsisCountholder != 0){
holder.telescopicContent.setText("全文");
holder.telescopicContent.setVisibility(View.VISIBLE);
} }
});

去上面的代码配合,实现TextView的收起与展开

viewHolder.telescopicContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.telescopicContent.getText().equals("全文")){
viewHolder.telescopicContent.setText("收起");
viewHolder.content.setMaxLines(50); }else {
viewHolder.telescopicContent.setText("全文");
viewHolder.content.setMaxLines(4); } }
});

改变一个字符串里自定字符的颜色或者大小

   SpannableString spannableString = new SpannableString("今天天气不错");
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 2, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv5.setText(spannableString);

setSpan方法有四个参数,

第一个参数:ForegroundColorSpan是为文本设置前景色,也就是文字颜色。如果要为文字添加背景颜色,可替换为BackgroundColorSpan。

第二个参数:文本颜色改变的起始位置

第三个参数:文本颜色改变的结束位置。

最后一个参数为布尔型,可以传入以下四种:

  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终止下标,包括起始下标
  • Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终止下标,同时包括起始下标和终止下标
  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终止下标,但都不包括起始下标和终止下标
  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终止下标,包括终止下标

文字间距

设置文字之间的间距

android:letterSpacing="0.5"

设置行间距

android:lineSpacingExtra="10dp"

设置行间距倍数

android:lineSpacingMultiplier="0.5"

字体阴影效果

水平阴影偏移量

android:shadowDx="1" 

垂直阴影偏移量

android:shadowDy="1" 

阴影颜色

android:shadowColor="#8c8c8c" 

阴影范围

android:shadowRadius="5"

文字颜色点击/选中后改变

在res创建color目录,在目录下面创建如下文件:

selected_text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="@color/color_text_yellow"/>
<item android:state_checked="true" android:color="@color/color_text_yellow"/>
<item android:state_pressed="true" android:color="@color/color_text_yellow"/>
<item android:state_selected="true" android:color="@color/color_text_yellow"/>
<item android:color="@color/color_55"/>
</selector>

在TextView里使用它

    <TextView
android:id="@+id/name"
android:text="name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/selected_text_color"/>

END

Android开发 TextView的开发记录的更多相关文章

  1. Android开发-Android Studio问题以及解决记录

    [Android开发] Android Studio问题以及解决记录   http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...

  2. android开发 textview根据字数长度自动调整字体大小

    需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText  注释掉的是之前的代码 import com.cars ...

  3. Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1

    在大学期间我做过非常多类似这种APP.这个是我们小组之前做的,我后期增加非常多新元素.完好了这个应用,由于为了加强 专业技术嘛.也是常常熬夜写些小东西,嘿嘿.只是还算不错.起码技术长进了不少嘛,还是非 ...

  4. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  5. 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例

    一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了 ...

  6.  paip.android环境搭建与开发事例

    paip.android环境搭建与开发事例 好长时间没有玩AndROID了..以前常常做ANDROID的,今天决定在下载一个要做个时间设置器 作者Attilax ,  EMAIL:1466519819 ...

  7. Android -- Android下的NDK开发(一)

    1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...

  8. Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!

    Android Widget小组件开发(一)--Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的! PS:学习自某网站(不打广告) 这个小组件相信大家都很熟悉吧,以前的墨迹天气 ...

  9. Android 个人手机通讯录开发

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示                2. ...

随机推荐

  1. Go的异常处理 defer, panic, recover

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  2. ionic:创建 APP

    ylbtech-ionic:创建 APP 1.返回顶部 1. ionic 创建 APP 前面的章节中我们已经学会了 ionic 框架如何导入到项目中. 接下来我们将为大家介绍如何创建一个 ionic ...

  3. Linux上 安装Sorl4.7 中间件用tomcat

    最近需要用到solr,公司内部搭建了一个solr测试环境. 版本:solr4.7.2 ,tomcat 7.0.55 jdk:1.7_051 解压 solr 和tomcat  这里就不详说. 1.启动t ...

  4. Auto.js淘宝领喵币

    最近,淘宝的新玩法,一直在充斥我的眼球,尤其是喵币的,盖楼... .... 于是就进去看了看,发现逛逛店铺,给好多喵币,但是要进20个,每个要15秒,好麻烦,于是就上网搜了一下,有没有脚本 因为之前搞 ...

  5. 关于a[::-1]

    b = a[i:j]   表示复制a[i]到a[j-1],以生成新的list对象,a[:]就相当于完整复制一份a b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,缺省为1.即从i到j每 ...

  6. **JLink Warning: Mis-aligned memory write: Address: 0x20000000, NumBytes: 2, Alignment: 2 (Halfword-aligned)

    网上也有同学遇到这个问题,http://www.openedv.com/thread-113049-1-3.html 根据他的经验我也重新安装了Jlink驱动: 顺便注意Dialog DLL:TARM ...

  7. moment 获取当前月日历

    获取当前月日历 <template> <div id="calendar"> <div class="top">{{date ...

  8. OC开发系列-成员变量的作用域

    成员变量的作用域 OC中成员变量有四种作用域,同时每一种作用域对应着响应的关键字. * @private:自能在当前类的实现@implementation中访问 * @protected: 可以在当前 ...

  9. 为什么学习JavaScript

    为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. ...

  10. MySQL sql_mode 说明(及处理一起sql_mode引发的问题)

    转自:https://segmentfault.com/a/1190000005936172 1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app ...