今天跟大家分享一下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. 组播(Multicast)传输

    组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...

  2. [SQL]不知道

    --COALESCE --返回其参数中第一个非空表达式. --语法 --COALESCE ( expression [ ,...n ] ) --参数 --expression --任何类型的表达式. ...

  3. [HDU 1011] Starship Troopers (树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值 因为题目里说要访问子节点必 ...

  4. dubbo服务框架学习

    ====================================================================================== 1.提供注册服务.消费者可 ...

  5. 下载和使用 Open XML PowerTools

    安装 Open XML SDK 2.5 首先,需要安装 Open XML SDK 2.5 ,从这个地址下载安装程序:http://www.microsoft.com/en-in/download/de ...

  6. windows常用运行命令收集(持续更新)

    快捷键打开运行窗口:Windows + R > calc(计算器) > gpedit.msc(本地组策略编辑器) > regedit(注册表) > mstsc(远程桌面) &g ...

  7. MPI初学-安装及OpenMPI函数说明

    一.Mac下OpenMPI的安装 所用电脑:MacBook Pro,OSX 10.11.2 从openmpi官网下载相应版本:OpenMPI 1.8下载 解压文件 双击解压或者tar zxvf ope ...

  8. Laxcus大数据管理系统2.0(10)- 第八章 安全

    第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...

  9. GLES & Shader Language 易错集锦

    1. vertex shader 和 fragment shader 通过varying变量传递数据,  如下代码在编译fragment shader时候会提示编译错误 vertex shader F ...

  10. 进制格式转换 c#

    Console.WriteLine());//即17是十六进制位 得到的结果是23 得到十进制数 将字符串转换成二进制 public static string mdFiveGet(string md ...