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 ...
随机推荐
- 新建的表如果还没有数据,用exp导的时候会忽略
源地址:http://www.07net01.com/2015/07/884873.html
- EDE,DEDE网站搬家,DEDECMS搬家教程,一看就会
无聊做个小教程:DEDE搬家,本人提供搬家 先来说下DEDE 大家会安装吧,不多说,看图 一.进入织梦DedeCms的后台备份数据库 步骤:系统 –> 数据库备份/还原 -> 全选有所织梦 ...
- windows timeGetTime() 函数 获取系统从开机到现在的毫秒时间值
#include <windows.h> #include <iostream> #pragma comment( lib,"winmm.lib" ) in ...
- POJ 2352 【树状数组】
题意: 给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数. 给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数.每个坐标最多有一 ...
- (easy)LeetCode 204.Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. Credits:Special t ...
- [HackerCup Round1 2] Autocomplete (Trie)
题目链接:https://www.facebook.com/hackercup/problems.php?pid=313229895540583&round=344496159068801 题 ...
- Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行
以下是类的代码: var Functions = { oFunctions: null, add: function (oFunc, oNewFunc) { var oNew = function ( ...
- OC基础(8)
自定义代码段 实例变量修饰符 依赖关系 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bott ...
- Refs to Components
一.ref是通过ReactDOM.render返回的 定义在组件上的render方法返回的是一个虚拟的DOM节点,jsx返回的是一个ReactElement,ReactDOM.render返回的是一个 ...
- jQuery 的随机密码生成 .
$.extend({ password: function (length, special) { var iteration = 0; var password = ""; va ...