Android开发 TextView的开发记录
前言
此篇博客是记录一些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的开发记录的更多相关文章
- Android开发-Android Studio问题以及解决记录
[Android开发] Android Studio问题以及解决记录 http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...
- android开发 textview根据字数长度自动调整字体大小
需求:根据输入的值实时显示到textview中预览,但是字体大小是要自动适配的 网上有一个代码,但是在我这里不能用,注意方法:refitText 注释掉的是之前的代码 import com.cars ...
- Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1
在大学期间我做过非常多类似这种APP.这个是我们小组之前做的,我后期增加非常多新元素.完好了这个应用,由于为了加强 专业技术嘛.也是常常熬夜写些小东西,嘿嘿.只是还算不错.起码技术长进了不少嘛,还是非 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例
一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了 ...
- paip.android环境搭建与开发事例
paip.android环境搭建与开发事例 好长时间没有玩AndROID了..以前常常做ANDROID的,今天决定在下载一个要做个时间设置器 作者Attilax , EMAIL:1466519819 ...
- Android -- Android下的NDK开发(一)
1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...
- Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
Android Widget小组件开发(一)--Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的! PS:学习自某网站(不打广告) 这个小组件相信大家都很熟悉吧,以前的墨迹天气 ...
- Android 个人手机通讯录开发
一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示 2. ...
随机推荐
- NX二次开发-创建旋转UF_MODL_create_revolved
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...
- [JZOJ 5814] 树
题目:从u到v经过多少条边. 思路: 考虑他是怎么走的?? 从\(u\)到\(v\)一定是\(fa[u]\),\(fa[fa[u]]\),反正就是走\(LCA\),那么如果算出每个点到父亲的期望步数, ...
- Java io简单总结
IO 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的 字符流在操作时使用了缓冲区,通过缓冲区再操作文件 缓冲:一段特殊的内存.如果一个程序频繁地操作一个资源(如文件或数据库),则性能会 ...
- Greenplum(PostgreSql)函数实现批量删除表
项目做库迁移,前期需要经常调整表结构语句,涉及多次的批量drop,本着偷懒精神写了这个函数.鉴于本函数在生产环境有巨大风险,建议测试完毕后立即删除. 主要步骤很简单:1)从pg_tables查询得到相 ...
- CSS3:教程
ylbtech-CSS3:教程 1.返回顶部 1. CSS3 教程 CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. 本教程向您讲解 CSS3 中的新特性. 开始学习 CSS3! ...
- RoHS
RoHS是<电气.电子设备中限制使用某些有害物质指令>(the Restriction of the use of certain hazardous substances in elec ...
- centos yum install 找不到软件包
yum install epel-release 然后再试试yum install 其他安装包
- PHP出现报警后需要修改 date.timezone 的值(php.ini)
PHP调试的时候出现了警告: It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题. 实际上,从PHP 5. ...
- Android开发 SeekBar开发记录
前言 开发记录博客不是讲解使用博客,更多的是各种功能与点子的记录 基本使用 <SeekBar android:layout_width="match_parent" andr ...
- BigDecimal踩过的大坑
通常Java中涉及金钱相关的计算为了保持精度,会采用BigDecimal来实现,但是BigDecimal中创建BigDecimal类对象的时候,如果使用直接new的话,必须是String类型的参数,否 ...