今天跟大家分享一下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按下后字体颜色改变的更多相关文章

  1. [转载]Linux下终端字体颜色设置方法

    原文地址:Linux下终端字体颜色设置方法作者:router 网上类似的文章有很多,但是都是转来转去的,没有经过测试,按照很多文章的方法会造成你设置之后的终端在换行和删除输入字符时终端显示会乱七八糟, ...

  2. echarts x轴或y轴文本字体颜色改变

    1:x轴文本字体颜色改变 xAxis : [ { type : 'category', data : ['<30','30-','40-','50-','60-','>=70'], axi ...

  3. $Android自定义控件在不同状态下的属性

    在写代码的时候,有时候需要控件在不同状态下显示不同的外观,比如在按钮按下的时候要变颜色,EditText获取焦点时候边框要变颜色等.那么下面就来梳理一下这些是怎么实现的. (一)按钮按下时候变颜色 1 ...

  4. Android Them+SharedPreferences 修改程序所有view字体颜色、大小和页面背景

    有这么一个需求,可以对页面的样式进行选择,然后根据选择改变程序所有字体颜色和页面背景.同时下一次启动程序,当前设置依然有效. 根据需求,我们需要一种快速,方便,有效的方式来实现需求,然后可以通过And ...

  5. 设置TextView按下时变换文字颜色

    在res中建立一个color文件夹,在其中新建一个xml(这里为text_color.xml): <selector xmlns:android="http://schemas.and ...

  6. QSS QPushButton:hover :pressed ...为状态下变更字体颜色(color)无效,变成字体粗细(font-weight)有效???

    //字体颜色变更无效 QPushButton:hover{ font-weight:bold; color:rgba(, , , ); } //字体颜色变更有效 QPushButton#pushBut ...

  7. Android自定义控件之仿美团下拉刷新

    美团的下拉刷新分为三个状态: 第一个状态为下拉刷新状态(pull to refresh),在这个状态下是一个绿色的椭圆随着下拉的距离动态改变其大小. 第二个部分为放开刷新状态(release to r ...

  8. Android自定义控件之TextView

    转自:http://labs.easymobi.cn/?p=284 有时候Android自带的控件无法满足我们的某些要求,这时就需要我们自定义控件来实现这些功能.比如需要一个TextView里的字倾斜 ...

  9. Android开发之TextView的下划线添加

    如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.fin ...

随机推荐

  1. SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据(转)

    在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中.接上篇文章,我们在创建好的分区表中插入几条数据 insert Sale ([Name],[SaleTime] ...

  2. [ActionScript 3.0] AS3 绘制12面体

    package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; im ...

  3. aix下oracle数据库创建表空间和用户

    #mklv -y lvname -T O -w n -s n -r n datavg 500 在两个节点分别修改如下权限: #chown -R oracle:oinstall /dev/rlvname ...

  4. [SQL]获取所有数据库名、获取数据库中表名、获取表中的字段名

    --()获取所有数据库名: Select Name FROM Master..SysDatabases order by Name --()获取所有表名 --XType=''U'':表示所有用户表; ...

  5. 用浏览器打开本地html 直接到首页 的解决方法

    方法1:直接把本地文件拖到浏览器就可以打开

  6. H264-AVS POC理解

    H264码流的输出顺序是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧. 在解码段拿到相应的I/P帧后,不能马上丢到buffer lis ...

  7. 编写javascript、Jquery的String.format();

    在javascript.Jquery里面好像是没有String.format();这个函数的,所以我们在拼接字符串的时候就特别的辛苦,生怕又打错,而且又乱,所以就自己去写一个函数来代替. String ...

  8. DP三角形

    Hrbust1038  http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1038 // ...

  9. 算法练习1 用c#编写的一个判定一组数是否是有序的

    //判定数组是否有序 //总的程序代码如下: using System; using System.Collections.Generic; using System.Linq; using Syst ...

  10. Flex4/Flash开发在线音乐播放器 , 含演示地址

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...