Android中EditText样式修改 聚焦光标、背景
在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样式修改 聚焦光标、背景的更多相关文章
- Android中EditText显示明文与密文的两种方式
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图 代码分析 方式一 /**方式一:*/ private void sh ...
- android中的样式和主题
有的时候我们一个页面要用很多个textview,而且这些textview的样式非常相像,这种情况下我们可以把这些样式抽取出来,然后在每个textview中引用即可,这样修改起来也方便. 我们来看一个简 ...
- 【整理】Android中EditText中的InputType类型含义与如何定义( 转 )
转自:[整理]Android中EditText中的InputType类型含义与如何定义 用到的时候查到了这篇文章觉得很不错,就在此记录下. [背景] 经过一些Android中EditText方面的折腾 ...
- 【转】Android中EditText中的InputType类型含义与如何定义
原文网址:http://www.crifan.com/summary_android_edittext_inputtype_values_and_meaning_definition/ 经过一些And ...
- android中的样式主题和国际化
一.Android中的样式和主题 1.1样式 样式是作用在控件上的,它是一个包含一个或者多个view控件属性的集合.android style类似网页设计中的css设计思路,可以让设计 ...
- 【我的Android进阶之旅】如何隐藏Android中EditText控件的默认下划线
Android EditText控件是经常使用的控件,但是有时候我们并不需要它的一些默认的属性,比如说下划线,因为有时候这样的默认下划线看起来特别怪异,和其他控件在一起搭配的时候不协调,因此有时候就需 ...
- 关于android中EditText边框的问题 下划线
方法1 将edittext的style设置成?android:attr/textViewStyle 取消掉默认的样式,在设置background为@null 接下来就是一个空空的edittext了, ...
- Ionic4.x Theming(主题) 增加内置主题 颜色 修改内置组件默认样式 修改底部 Tabs 背景颜色以及按钮颜色
1.Ionic4.x Theming(主题) Ionic4.x 修改主题颜色的话需要在 src/theme/variables.scss 文件中修改. https://ionicframework.c ...
- vue中Element-ui样式修改
下拉框(el-dropdown) // hover 下拉框的hover效果 .el-dropdown-menu__item:focus, .el-dropdown-menu__item:not(.is ...
随机推荐
- 防止SQL注入攻击的一些方法小结
SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...
- c++操作符重载
一.类型转换操作符(type conversion operator)[1] 参考: [1]. C++类型转换操作符(type conversion operator): http://www.cpp ...
- Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制
本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...
- web form 控件
webform的简单控件1.Label:文本显示,编译后是span属性:颜色,样式,边线宽度2.Literal:纯文本显示,编译后是text 3.TextBox:文本框TextMode-密码框.文本域 ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- CSS样式的插入方式
1.外部样式: 当样式需要应用于很多页面时,外部样式表将是理想的选择.<head> <link rel="stylesheet" type="text/ ...
- oracle SQL查询中间若干条记录
方法一:利用rownum和差集函数minus select * from ( select * from emp order by sal) where rownum<13 minus sele ...
- 转 Eric Raymond对于几大开发语言的评价
原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大 ...
- [转载] Android.Hook框架xposed开发篇
本文转载自: http://www.52pojie.cn/thread-396793-1-1.html 原帖:http://drops.wooyun.org/tips/7488 作者:瘦蛟舞 官方教程 ...
- Selenium2+python自动化14-iframe
前言 有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以http://mail.163.com/登录页面10为案例,详细介绍 ...