今天跟大家分享一下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. 搭建一个springmvc helloworld程序

    1.加jar包,需要8个,从springframework里面选 logging core aop context expression bean web webmvc 2.配置web.xml,在文件 ...

  2. [ActionScript 3.0] AS3 用于拖动对象时跟随鼠标的缓动效果

    package com.fylibs.components.effects { import flash.display.DisplayObject; import flash.events.Even ...

  3. grunt构建前端自动化的开发环境

    废话不多说.直奔主题. 1.安装node. 别问为什么.如果你不知道,说了你还是不知道. 别问怎么安装,自己去百度. 2.安装grunt_CLI. 安装完node,并且安装成功了,后.下载grunt_ ...

  4. centos 6.5 安装 buildbot-slave 0.8.9

    公司服务器多数都用的centos,这个是大环境,改不了,只好研究怎么安装buildbot-slave. buildbot-master倒是没有问题,可控,自己弄了一个ubuntu14来玩. cento ...

  5. (medium)LeetCode 222.Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  6. isAnagram

    /*Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = ...

  7. maven skip tests

    DskipTests=true is short form of -Dmaven.test.skip=true

  8. MySQL数据库优化技术之数据库表的设计

    三范式介绍表的范式:只有符合的第一范式,才能满足第二范式,进一步才能满足第三范式. 1. 第一范式:表的列具有原子性,不可再分解.只要是关系型数据库都自动满足第一范式.数据库的分类:关系型数据库:My ...

  9. MFC学习 文件操作注册表操作

    c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...

  10. 慕课网-安卓工程师初养成-3-9 Java中运算符的优先级

    来源 http://www.imooc.com/code/1315 所谓优先级,就是在表达式中的运算顺序.Java 中常用的运算符的优先级如下表所示: 级别为 1 的优先级最高,级别 11 的优先级最 ...