android自定义EditText样式

在android里面自定义 EditText 样式比 HTML中自定义 input 样式麻烦很多,而且灵活很多,关键看自己项目需求确定采用哪种方式更简单。

通常官方的默认样式跟实际项目的UI还是有很多大的差距的,这就需要我们慢慢来研究怎样修改达到项目的UI要求。

 

第一种:修改 EditText 的 theme 属性来修改默认的样式跟获得焦点的颜色。

在styles.xml文件里面创建一对<style></style>标签,并且给style标签设置 name 属性跟 parent 属性。

布局文件中的 editText:

<EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:theme="@style/myEditText"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:textColor="#999999"
            />

styles.xml文件中:

<style name="myEditText" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">#ADADAD</item>
    <item name="colorControlActivated">#2196F3</item>
</style>

修改默认的样式跟点击获得焦点后的样式。这里我为了方便直接写上颜色值,实际上还可以通过 @color/XXX 来进行颜色的引用,方便后续的管理。

 

第二种:通过 background 来引用修改样式

在drawables 文件夹下新建3个XML文件

这个XML文件是以selector标签开始的,在这个文件中定义了两种状态,一种是默认状态跟获得焦点时的状态分别引用了不同的XML文件,命名为 custom_editor.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="false" android:drawable="@drawable/custom_edittext_normal"></item>
    <item android:state_focused="true" android:drawable="@drawable/custom_edittext_active"></item>
</selector>

custom_edittext_normal.xml 文件,以 shape 标签开始的文件。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:color="@color/colorPrimary" android:width="1dp"/>
    <corners android:radius="5dp" />
</shape>

custom_edittext_active.xml 文件,以 shape 标签开始的文件。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:color="@color/colorAccent" android:width="1dp"/>
    <corners android:radius="5dp" />
</shape>

这里记录一下shape标签内部属性值:

corners 定义圆角

gradient 定义渐变效果

padding 定义内边距

size 定义自定义的图形大小

solid 定义内部填充颜色

stroke 定义绘制边界

 

第三种:终极大招

通过 style 属性来实现  EditText 自定义样式。

布局文件:

<EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            style="@style/myCustomStyle"
            />

styles.xml 文件中添加

<style name="myCustomStyle">
        <item name="android:color">#2196F3</item>
        <item name="android:background">@drawable/custom_edittext</item>
        <item name="android:padding">10dp</item>
    </style>

在这个文件中通过定义的background属性实现 上文的第二种方式。

 

最最最重要的根据自己项目选择合适的方式去实现自定义样式,这里是我个人的一些总结。

 

posted @ 2022-04-27 00:58  星锋  阅读(2088)  评论(0编辑  收藏  举报