在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. 2016-08-16: copy-and-swap

    #include <algorithm> // std::copy #include <cstddef> // std::size_t #include <stdio.h ...

  2. 做一个高效的IOS开发工程师

    最近觉得自己的开发效率太慢了,总结了一下:熟练度不够是一方面,经常用到东西查看一下,积累问题?一方面,这个无法分享的.现在主要分享的是:如何高效的用好自己的时间. 1.善用xcode. xcode实在 ...

  3. Analyze network packet files very carefully

    As a professional forensic guy, you can not be too careful to anlyze the evidence. Especially when t ...

  4. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  5. 阿里巴巴分布式服务框架Dubbo介绍(1)主要特色

    引言 互联网服务和BS架构的传统企业软件相比,系统规模上产生了量级的差距.例如 传统BS企业内部门户只需要考虑数百人以及几千人的访问压力,而大型互联网服务有时需要考虑的是千万甚至上亿的用户: 传统企业 ...

  6. 进阶篇:以IL为剑,直指async/await

    接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的 ...

  7. form 上传 html 代码

    $("#fm").form('submit',{ url: url, onSubmit: function(){ //进行表单验证 $scope.editor.sync(); va ...

  8. ssh连接速度慢解决

    这些天,公司新安装的几台服务器,发现SSH本地连接上去,速度非常慢,慢的难以忍受,大概30秒左右. 后来到网上查了下,尝试了一种办法,效果还可以,特发上来给大家共享. [root@data208 ~] ...

  9. [2015hdu多校联赛补题]hdu5348 MZL's endless loop

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给你一个无向图,要你将无向图的边变成有向边,使得得到的图,出度和入度差的绝对值小于等于1, ...

  10. (转)linux获取/查看本机出口ip

    获取/查看本机出口ip  curl http://members.3322.org/dyndns/getip 1 curl ifconfig.me 2 #或者 3 curl http://member ...