一、效果图:

当点击控件时,有个下划线的选中效果

二、实现

在values下添加资源文件attrs_underline.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="UnderlineTextView"><attr name="underline_color" format="color"/><attr name="underline_height" format="dimension"/></declare-styleable>
</resources>

添加UnderlineTextView类

package com.example.tutkselfdev.utils;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
import android.util.TypedValue;import com.example.tutkselfdev.R;/*** 带下划线的TextView* 可以设置下划线高度和颜色* 可以按需扩展其他属性(如下划线宽度等)*/
public class UnderlineTextView extends AppCompatTextView {//Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,//样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,//大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关private final Paint paint = new Paint();//下划线高度private int underlineHeight = 0;//下划线颜色private int underLineColor;private boolean isClicked = false;//通过new创建实例是调用这个构造函数//这种情况下需要添加额外的一些函数供外部来控制属性,如set*(...);public UnderlineTextView(Context context) {this(context, null);}//通过XML配置但不定义style时会调用这个函数public UnderlineTextView(Context context, AttributeSet attrs) {this(context, attrs, 0);//获取自定义属性
//        TypedArray typedArray = context.obtainStyledAttributes(attrs,);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.UnderlineTextView);//获取具体属性值underLineColor = typedArray.getColor(R.styleable.UnderlineTextView_underline_color, getTextColors().getDefaultColor());underlineHeight = (int) typedArray.getDimension(R.styleable.UnderlineTextView_underline_height,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()));}//通过XML配置且定义样式时会调用这个函数public UnderlineTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}//防止下划线高度大到一定值时会覆盖掉文字,需从写此方法@Overridepublic void setPadding(int left, int top, int right, int bottom) {super.setPadding(left, top, right, bottom + underlineHeight);}//绘制下划线@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//设置下划线颜色if (isClicked) {paint.setColor(underLineColor);//float left, float top, float right, float bottom
//            canvas.drawRect(0, getHeight() - underlineHeight, getWidth(), getHeight(), paint);canvas.drawRect(getWidth() / 2 - dp2px(10), getHeight() / 6 * 5, getWidth() / 2 + dp2px(10), getHeight() / 6 * 5 + underlineHeight, paint);}}private int dp2px(float dp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());}public void setClicked(boolean clicked) {isClicked = clicked;postInvalidate();}}

在布局中引用布局

    <LinearLayoutandroid:id="@+id/ll_bar"android:layout_width="match_parent"android:layout_height="50dp"android:layout_below="@id/title_bar"android:layout_marginTop="10dp"android:background="@color/white"android:orientation="horizontal"><com.example.tutkselfdev.utils.UnderlineTextViewandroid:id="@+id/tv_photos"style="@style/setting_text"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/item_selector"android:clickable="true"android:gravity="center"android:text="@string/photos"app:underline_color="@color/gaoqing"app:underline_height="2dp"/><com.example.tutkselfdev.utils.UnderlineTextViewandroid:id="@+id/tv_video"style="@style/setting_text"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/item_selector"android:clickable="true"android:gravity="center"android:text="@string/video"app:underline_color="@color/gaoqing"app:underline_height="2dp"/></LinearLayout>

在Activity中设置点击改变效果

    private void setOnClicked(int i) {if (i == 0) {tvPhotos.setClicked(true);tvVideo.setClicked(false);}else {tvPhotos.setClicked(false);tvVideo.setClicked(true);}}

参考于:

https://blog.csdn.net/francisshi/article/details/40052381

Android自定义控件 ---- 带下划线的TextView相关推荐

  1. android 字体加下划线,android自定义带下划线EditText解决文字压线的问题

    最近做项目,需要用到带下划线的EditText,通过学习Android提供的示例Notepad,对其进行小小的改动,解决文字压线的问题,但是光标压线的问题没有解决,希望以后能够解决,效果和代码如下: ...

  2. android字体带下划线

    界面布局文件代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:and ...

  3. FragmentTabHostUnderLineDemo【FragmentTabHost带下划线】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用FragmentTabHost实现顶部选项卡(带下划线效果)展现. 效果图 代码分析 1.该Demo中采用的是FragmentT ...

  4. android xml 画下划线,android – strings.xml:如何从标记前面的空格中删除下划线?...

    我的strings.xml中有以下行: This is a test 在我的活动xml中,我在TextView中引用了这个字符串: android:layout_width="wrap_co ...

  5. TabTopUnderLineLayout【自定义顶部选项卡(带下划线)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线样式的效果. 备注:如果配合Fragment的话,MainActivit ...

  6. 解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题

    解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题 参考文章: (1)解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题 (2)https://www.cnblogs. ...

  7. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  8. Spring Boot——MyBatis配置带下划线命名的字段自动转换驼峰命名解决方案

    问题描述 MyBatis无法查询出属性名和数据库字段名不完全相同的数据. 即:属性名和数据库字段名分别为驼峰命名和下划线命名时查出的数据为NULL. 问题分析 MyBatis默认是属性名和数据库字段名 ...

  9. android AppCompatEditText 自定义下划线颜色

    今天,就讲讲  AppCompatEditText设置下划线颜色的知识. 如下图所示: style中添加 </pre><pre name="code" cla ...

  10. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

最新文章

  1. 【java】兴唐课程第五节到第九节知识点总结
  2. java多if语句的优化方案_Java代码多分支语句优化
  3. python算法与数据结构-二叉树的代码实现(46)
  4. 使用ML.NET实现猜动画片台词
  5. 240多个jQuery常用到的插件
  6. Pytorch高阶API示范——DNN二分类模型
  7. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]
  8. rocketMq双master集群模式下故障演练
  9. 数据链路层解决的三个问题
  10. 64位x86的函数调用栈布局
  11. [BZOJ1602BZOJ1787BZOJ2144]树上LCA的算法巩固练习
  12. Jni开发(二)Linux运行java测试代码
  13. Oracle安装步骤(自用)
  14. Pyhton爬取百度文库文字写入word文档
  15. python绘制缓和曲线_CAD里面如何绘制缓和曲线
  16. 深度剖析JAVA软件工程师
  17. 【PyCharm 使用指南】之 error running
  18. iOS中assign和weak的区别
  19. Unity 获取鼠标点击图片时 获取点击位置的像素
  20. 服务器上建个新文件夹怎么共享打印机,新服务器怎样设置共享打印机

热门文章

  1. ︰【】奥立诚生物科技 奥立诚生物科技研发的华龙6号蜈蚣 成养殖行业的亮点
  2. 北京家庭摇号计算机,北京摇号积分计算|2021北京家庭摇号积分怎么算? 北京家庭积分摇号计算 - 有车一族汽车网...
  3. C语言中各种格式字符说明
  4. 2.flask模板--jinja2
  5. 一文看懂ARM Cortex-M处理器 ARM Cortex-M 处理器家族介绍和比较
  6. 北斗短报文的工作原理及作用
  7. eval解析json字符串
  8. 102分布式电商项目 - JVM调优(理论篇)
  9. Solr搜索引擎原理
  10. 在聊天群中,如何快速获取信息,了解群中讨论的话题。