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 ...
随机推荐
- SmartWiki文档在线管理系统简介
简介 SmartWiki是一款针对IT团队开发的简单好用的文档管理系统.可以用来储存日常接口文档,数据库字典,手册说明等文档.内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需 ...
- No.016 3Sum Closest
16. 3Sum Closest Total Accepted: 86565 Total Submissions: 291260 Difficulty: Medium Given an array S ...
- JavaScript笔记:数据类型
javascript中有5种基本数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型--Object.javascript不支持任何创建自定义类型 ...
- Loadrunner:LR提交JSON格式的POST请求
场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- Hadoop HDFS编程 API入门系列之从本地上传文件到HDFS(一)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs5; import java.io.IOException; import ja ...
- 第九十九天上课 PHP TP框架 数据库查询和增加
在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yong ...
- Spring3 url匹配规则
Spring3 url匹配规则 Wildcard Description ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 宝贝网址:
- java 链接jdbc
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- spring3.0事务管理配置
转载:http://war-martin.iteye.com/blog/1396335 第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的 ...