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 ...
随机推荐
- mybatis的增删改查
一.配置文件方式 mapper.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- [Flex] as3xls读取excel,修改保存单表(二)
这个方法仅用了as3xls读取excel的功能,修改保存独立出来了. <?xml version="1.0" encoding="utf-8"?> ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
- crm 4 隐藏自定义 toolbar
//隐藏指定title按钮 function hideISVButton(buttonTitle) { var comps = document.getElementsByTagName('li'); ...
- Java SE 第十六讲----面向对象特征之多态
1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...
- Javascript同源策略对context.getImageData的影响
在本机测试HTML5 Canvas程序的时候,如果用context.drawImage()后再用context.getImageData()获取图片像素数据的时候会抛出错:SECURITY_ERR: ...
- centos设置开机自启动
编辑 /etc/rc.d/rc.local 将要开启的服务添加到该文件即可
- [SQL]SQL语言入门级教材_SQL功能与特性(一)
SQL功能与特性 其实,在前面的文章中,已经提及SQL命令的一些基本功能.然而,通过 SQL命令,程序设计师或数据库管理员(DBA)可以: (一)建立数据库的表格.(包括设置表格所可以使用之空间) ( ...
- Android——主流分辨率
VGA:480*640 QVGA:240*320 HVGA:320*480 WVGA:480*800 FWVGA:480*854 IntelHaxm.exe 模拟器加速器
- Android:Activity的跳转
// 实际开发中常用的方法 Intent intent = new Intent(); intent.setClass(MainActivity.this, LoginActivity.class); ...