在Android开发中,根据项目的需求,需要定制一些特殊的样式,例如:使用EditText时,聚焦时的背景及光标图片使用自定义而非android系统默认的。这两天,在项目中涉及此需求,现记录如下:

  首先,说明灵感来自于http://bbs.csdn.net/topics/391491663中的评论,谢谢!另外,若想了解更多EditText属性,可参考:http://blog.csdn.net/qq_15128547/article/details/50947041

默认情况下:

<EditText                                            
            android:id="@+id/editText"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:gravity="left"
            android:hint="hint"
           />

默认运行效果如下:

观察效果发现,默认情况下,聚焦背景蓝色、光标黑色、选择下方是蓝色图片(即图中的textSelectHandle)

现将上述三项改为自定义,需要下述三个属性:

android:background        背景

android:textCursorDrawable   光标

android:textSelectHandle    聚焦选择图标

设置如下:

<EditText
            android:id="@+id/editText"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:gravity="left"
            android:hint="hint"
            android:background="@drawable/edit_text_bg"
            android:textCursorDrawable="@drawable/edit_cursor"
            android:textSelectHandle="@drawable/edit_select_handle" />

设置后运行效果如下:

下面,分别描述对应样式图片:

edit_text_bg:自定义背景
edit_cursor:光标
edit_select_handle:聚焦选择下方图标

上述三个,均使用自定义drawable,具体代码如下:
edit_text_bg.xml:


 <?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
>
<selector>
<item android:state_enabled="false">
<nine-patch android:src="@drawable/edittext_thin"
android:tint="@color/n_text_default_color"
/> <!--tint:着色器 例:当前edittext_src是黑色的线条,而显示时,由于使用了tint,重新设置了颜色,因此,就会显示设置的线条颜色 -->
</item>
<item android:state_pressed="false" android:state_focused="false">
<nine-patch android:src="@drawable/edittext_thin"
android:tint="@color/n_text_default_color" />
</item>
<item>
<nine-patch android:src="@drawable/edittext_thin"
android:tint="@color/n_text_focus_color" />
</item>
</selector>
</inset>

 

edit_cursor.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > <size android:width="2dp" /> <solid android:color="@color/n_text_focus_color" /> </shape>

edit_select_handle.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > <size android:width="0dp" /> <!-- 实际不显示,该图片的作用仅是占位,因直接设置android:textSelectHandle="@null"运行时出错,当然根据具体情况,可设置成一张图片png等 --> </shape>

整个修改涉及的代码如上,但需要注意一下事项:

1、若是仅某个EditText需要使用特殊样式则直接在当前EditText中设置属性即可;但为了可扩展性,建议写在styles.xml中,以后在需要的EditText中引用该样式即可,即:

<EditText
...
style="@style/EditTextStyle"
...
/>

2、若整个项目均统一风格,则在AndroidManifest.xml中的<application>标签中,加入android:theme="@style/AppTheme",其中AppTheme中加入以下属性即可:

<style name="AppTheme" parent="@style/AppBaseTheme">
...
<item name="android:editTextStyle">@style/EditTextStyle</item>
...
</style>

3、关于EditTextStyle的样式如下:

<!-- EditTextStyle  EditText样式设置:背景、光标、选中下方图标 -->
<style name="EditTextStyle" parent="android:Widget.Material.Light.EditText">
<item name="android:background">@drawable/edit_text_bg</item>
<item name="android:textCursorDrawable">@drawable/edit_cursor</item>
<item name="android:textSelectHandle">@drawable/edit_select_handle</item>
</style > <!-- 关于上述的parent="android:Widget.Material.Light.EditText",需要根据自己当前主题Theme设置 ;其实也没多大差别,查看源码发现最终的都是parent="Widget.EditText" -->

--------------------------补充以下,另外一张图,选择文本时,出现的图标:

android同样提供了相应的属性,在此不再赘述:

android:textSelectHandleLeft="@drawable/edit_select_left"      //左
android:textSelectHandleRight="@drawable/edit_select_right"     //右

疑问:在写代码时,用到hint,但是,起初运行时,并未显示 ,多次修改也不行,最后,很之前的一个界面对比,发现当前Activity没有设置Theme,于是就设置了系统的Theme,结果就可以了,不知道问什么?知道的小伙伴,麻烦告知:

<style name="AppBaseTheme" parent="android:Theme.Light">
</style> <style name="AppTheme" parent="@style/AppBaseTheme"></style>

此文仅是抛砖引玉,关于EditText属性还很多,大家可以测试,有什么问题,欢迎交流!

Android中EditText样式修改 聚焦光标、背景的更多相关文章

  1. Android中EditText显示明文与密文的两种方式

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图    代码分析 方式一 /**方式一:*/ private void sh ...

  2. android中的样式和主题

    有的时候我们一个页面要用很多个textview,而且这些textview的样式非常相像,这种情况下我们可以把这些样式抽取出来,然后在每个textview中引用即可,这样修改起来也方便. 我们来看一个简 ...

  3. 【整理】Android中EditText中的InputType类型含义与如何定义( 转 )

    转自:[整理]Android中EditText中的InputType类型含义与如何定义 用到的时候查到了这篇文章觉得很不错,就在此记录下. [背景] 经过一些Android中EditText方面的折腾 ...

  4. 【转】Android中EditText中的InputType类型含义与如何定义

    原文网址:http://www.crifan.com/summary_android_edittext_inputtype_values_and_meaning_definition/ 经过一些And ...

  5. android中的样式主题和国际化

    一.Android中的样式和主题     1.1样式     样式是作用在控件上的,它是一个包含一个或者多个view控件属性的集合.android style类似网页设计中的css设计思路,可以让设计 ...

  6. 【我的Android进阶之旅】如何隐藏Android中EditText控件的默认下划线

    Android EditText控件是经常使用的控件,但是有时候我们并不需要它的一些默认的属性,比如说下划线,因为有时候这样的默认下划线看起来特别怪异,和其他控件在一起搭配的时候不协调,因此有时候就需 ...

  7. 关于android中EditText边框的问题 下划线

    方法1 将edittext的style设置成?android:attr/textViewStyle 取消掉默认的样式,在设置background为@null 接下来就是一个空空的edittext了, ...

  8. Ionic4.x Theming(主题) 增加内置主题 颜色 修改内置组件默认样式 修改底部 Tabs 背景颜色以及按钮颜色

    1.Ionic4.x Theming(主题) Ionic4.x 修改主题颜色的话需要在 src/theme/variables.scss 文件中修改. https://ionicframework.c ...

  9. vue中Element-ui样式修改

    下拉框(el-dropdown) // hover 下拉框的hover效果 .el-dropdown-menu__item:focus, .el-dropdown-menu__item:not(.is ...

随机推荐

  1. SmartWiki文档在线管理系统简介

    简介 SmartWiki是一款针对IT团队开发的简单好用的文档管理系统.可以用来储存日常接口文档,数据库字典,手册说明等文档.内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需 ...

  2. No.016 3Sum Closest

    16. 3Sum Closest Total Accepted: 86565 Total Submissions: 291260 Difficulty: Medium Given an array S ...

  3. JavaScript笔记:数据类型

    javascript中有5种基本数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型--Object.javascript不支持任何创建自定义类型 ...

  4. Loadrunner:LR提交JSON格式的POST请求

    场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...

  5. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁

    本节内容: 进程与线程区别 线程 a)  语法 b)  join c)  线程锁之Lock\Rlock\信号量 d)  将线程变为守护进程 e)  Event事件 f)   queue队列 g)  生 ...

  6. Hadoop HDFS编程 API入门系列之从本地上传文件到HDFS(一)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs5; import java.io.IOException; import ja ...

  7. 第九十九天上课 PHP TP框架 数据库查询和增加

    在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yong ...

  8. Spring3 url匹配规则

    Spring3 url匹配规则 Wildcard Description ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 宝贝网址:

  9. java 链接jdbc

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  10. spring3.0事务管理配置

    转载:http://war-martin.iteye.com/blog/1396335 第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的 ...