android自定义控件实现TextView按下后字体颜色改变
今天跟大家分享一下Android自定义控件入门,先介绍一个简单的效果TextView,按下改变字体颜色,后期慢慢扩展更强大的功能
直接看图片

第一张是按下后截的图,功能很简单,也很容易实现,下面来看一下如何通过重写TextView来实现
一共三个文件 TextViewM.java,MainActivity.java,activity_textview.xml
TextViewM.java
package landptf.control;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
/**
* 重写TextView 实现点击改变字体颜色
* @author landptf
* @date 2015-6-6
*/
public class TextViewM extends TextView{
private int textColori = 0;//控件的文字颜色,Int型
private String textColors = "";//控件的文字颜色,String型
private int textColorSeletedi = 0;//控件被按下后的文字颜色,Int型
private String textColorSeleteds = "";//控件被按下后的文字颜色,String型
public TextViewM(Context context) {
this(context, null);
}
public TextViewM(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/**
* 实现TextView的构造方法
* @param context
* @param attrs
* @param defStyle
*/
public TextViewM(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
//设置TextView的Touch事件
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
//设置颜色变化
setColor(event.getAction());
//注意此处的返回值,若想设置TextView的Click事件,则返回false
return true;
}
});
}
//设置颜色变化,该方法为private,不对外公开
private void setColor(int state){
try {
//根据传过来的MotionEvent值来设置文字颜色
if (state == MotionEvent.ACTION_DOWN) {
//鼠标按下
if (textColorSeletedi != 0) {
setTextColor(textColorSeletedi);
}else if (!textColorSeleteds.equals("")) {
setTextColor(Color.parseColor(textColorSeleteds));
}
}
if (state == MotionEvent.ACTION_UP) {
//鼠标抬起
if (textColori == 0 && textColors.equals("")) {
//如果为设置颜色值,则默认为黑色
setTextColor(Color.BLACK);
}else if (textColori != 0) {
setTextColor(textColori);
}else {
setTextColor(Color.parseColor(textColors));
}
}
} catch (Exception e) {
}
}
/**
* 设置文字的颜色
* 为了不造成原setTextColor的冲突,在后面加“i”
* @param color int类型
*/
public void setTextColori(int color) {
this.textColori = color;
try {
this.setTextColor(color);
} catch (Exception e) {
}
}
/**
* 设置文字的颜色
* 为了不造成原setTextColor的冲突,在后面加“s”
* @param color String类型
*/
public void setTextColors(String color) {
this.textColors = color;
try {
this.setTextColor(Color.parseColor(color));
} catch (Exception e) {
}
}
/**
* 设置文字被按下后的颜色
* @param color int类型
*/
public void setTextColorSeleted(int textColorSeletedi) {
this.textColorSeletedi = textColorSeletedi;
}
/**
* 设置文字被按下后的颜色
* @param color String类型
*/
public void setTextColorSeleted(String textColorSeleteds) {
this.textColorSeleteds = textColorSeleteds;
}
}
布局文件activity_textview.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:ignore="HardcodedText" > 7 8 <landptf.control.TextViewM 9 android:id="@+id/tvText1" 10 android:layout_width="match_parent" 11 android:layout_height="50dp" 12 android:background="#AA6666" 13 android:gravity="center" 14 android:text="TEXT1" 15 android:textSize="20sp" /> 16 17 <landptf.control.TextViewM 18 android:id="@+id/tvText2" 19 android:layout_width="match_parent" 20 android:layout_height="50dp" 21 android:layout_below="@+id/tvText1" 22 android:layout_marginTop="50dp" 23 android:background="#66FF66" 24 android:gravity="center" 25 android:text="TEXT2" 26 android:textSize="20sp" /> 27 28 </RelativeLayout>
测试类:MainActivity.java
package landptf.control;
import android.app.Activity;
import android.os.Bundle;
/**
* 测试类
* @author landptf
* @date 2015-6-6
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_textview);
initView();
}
//初始化控件
private void initView() {
TextViewM tvText1 = (TextViewM) findViewById(R.id.tvText1);
//对tvText1设置int型的颜色id
tvText1.setTextColori(android.graphics.Color.WHITE);
//按下的颜色
tvText1.setTextColorSeleted(android.graphics.Color.GRAY);
//对tvText2设置String型的颜色
TextViewM tvText2 = (TextViewM) findViewById(R.id.tvText2);
tvText2.setTextColors("#ffffffff");
//按下的颜色
tvText2.setTextColorSeleted("#ff888888");
}
}
代码实现的功能比较简单,可以在此基础上继续扩展,比如按下改变背景色等等。这样便可以省去好多xml文件,只通过封装几行代码就可以功能实现一些。
明天再写一个健壮一些的控件。
android自定义控件实现TextView按下后字体颜色改变的更多相关文章
- [转载]Linux下终端字体颜色设置方法
原文地址:Linux下终端字体颜色设置方法作者:router 网上类似的文章有很多,但是都是转来转去的,没有经过测试,按照很多文章的方法会造成你设置之后的终端在换行和删除输入字符时终端显示会乱七八糟, ...
- echarts x轴或y轴文本字体颜色改变
1:x轴文本字体颜色改变 xAxis : [ { type : 'category', data : ['<30','30-','40-','50-','60-','>=70'], axi ...
- $Android自定义控件在不同状态下的属性
在写代码的时候,有时候需要控件在不同状态下显示不同的外观,比如在按钮按下的时候要变颜色,EditText获取焦点时候边框要变颜色等.那么下面就来梳理一下这些是怎么实现的. (一)按钮按下时候变颜色 1 ...
- Android Them+SharedPreferences 修改程序所有view字体颜色、大小和页面背景
有这么一个需求,可以对页面的样式进行选择,然后根据选择改变程序所有字体颜色和页面背景.同时下一次启动程序,当前设置依然有效. 根据需求,我们需要一种快速,方便,有效的方式来实现需求,然后可以通过And ...
- 设置TextView按下时变换文字颜色
在res中建立一个color文件夹,在其中新建一个xml(这里为text_color.xml): <selector xmlns:android="http://schemas.and ...
- QSS QPushButton:hover :pressed ...为状态下变更字体颜色(color)无效,变成字体粗细(font-weight)有效???
//字体颜色变更无效 QPushButton:hover{ font-weight:bold; color:rgba(, , , ); } //字体颜色变更有效 QPushButton#pushBut ...
- Android自定义控件之仿美团下拉刷新
美团的下拉刷新分为三个状态: 第一个状态为下拉刷新状态(pull to refresh),在这个状态下是一个绿色的椭圆随着下拉的距离动态改变其大小. 第二个部分为放开刷新状态(release to r ...
- Android自定义控件之TextView
转自:http://labs.easymobi.cn/?p=284 有时候Android自带的控件无法满足我们的某些要求,这时就需要我们自定义控件来实现这些功能.比如需要一个TextView里的字倾斜 ...
- Android开发之TextView的下划线添加
如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...
随机推荐
- C#中修改Dll文件 (反编译后重新编译)
Dll文件生成后,如没有源代码,又要修改其中内容 可以用微软自带的ildasm和ilasm程序 先用ildasm将dll文件反编译成il文件 ildasm Test.dll /out=Test.il ...
- java利用过滤器实现编码的转换,内容输出的替换
在页面建个表单 <form action="login.do" method="post"> <input type="text&q ...
- HTTP权威指南一
HTTP——因 特网的多媒体信使 每天, 都有数以亿万计的 JPEG 图片. HTML 页面. 文本文件. MPEG 电影. WAV音频文件. Java 小程序和其他资源在因 特网 上游弋. HTTP ...
- Innosetup中将bat文件压缩到压缩包中
有时候在安装的过程中需要调用某些文件(bat或者exe等文件),但是只需要使用一次,然后就可以删掉该文件, 在Innosetup中应该这样操作: 1.在.iss脚本的[Files]章节写下: So ...
- 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)
用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...
- 【转】又一波你可能不知道的 Linux 命令行网络监控工具
对任何规模的业务来说,网络监控工具都是一个重要的功能.网络监控的目标可能千差万别.比如,监控活动的目标可以是保证长期的网络服务.安全保护.对性能进行排查.网络使用统计等.由于它的目标不同,网络监控 ...
- EDS 14.0 dtc:commmand not found
EDS 14.0在生成dtb文件时,输入命令: dtc -I dts -O dtb -o soc_system.dtb soc_system.dts 出现错误: bash:dtc:command on ...
- canvas-star6.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UITableView 详解 ()
(原本取至D了个L微信公众号) UITableView 详解 一.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRec ...
- Linux下搭建Lotus Domino集群
Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...