自定义Editext 底部下划线,并根据焦点有无改变颜色

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lijia1201900857/article/details/79237177

 最近一个项目效果,输入框只保留底部下划线,并可以根据是否获取到焦点变色。首先想到了自定义View。但是感觉为这么个小功能,有点大材小用。查了一下资料,发现使用自定义背景样式就可以简单的实现。特此记录。

首先,需要绘制绘制一个Edittext的背景边框。填充色设置为透明

<shape android:shape="rectangle" >
            <solid android:color="@android:color/transparent" />

   <!--设置边框宽度和颜色 -->

  <stroke
                android:width="1dp"
                android:color="@android:color/holo_blue_bright" />
  </shape>

 但是这是一个有四个边框的方形图片。需要把左、上、右的边框去掉。方法很简单,就是设置边框的边距。将边距设置为 负数,就看不到了。


完整代码如下:


第一步、设置 没有焦点时的边框

unfocus_bg.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
      <!-- 给边框 设置编边距   将边框的左、上、右 设置为负数,会将边框移除屏幕 ,只能看到底部的下划线 -->
     <item
        android:left="-10px"
        android:right="-10px"
        android:top="-10px">

    <!-- 绘制一个方形边框,填充色设置为透明 -->
        <shape android:shape="rectangle"> 
            <solid android:color="@android:color/transparent" />

<!--设置边框的宽度和颜色 -->

            <stroke
                android:width="1dp"
                android:color="@android:color/holo_red_light" />
      <!-- 如果感觉字体距离底部或者左边太近,可以设置 padding属性 拉开距离 -->
            <padding
                android:bottom="5px"
                android:left="10px"/>
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>

第二步、设置 获取焦点时的边框和颜色

focus_bg.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:left="-10px"
        android:right="-10px"
        android:top="-10px">

        <shape android:shape="rectangle"> 
            <solid android:color="@android:color/transparent" />

            <stroke
                android:width="1dp"
                android:color="@android:color/holo_red_light" />
      
            <padding
                android:bottom="5px"
                android:left="10px"/>
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>


第三步、设置背景选择器,根据有无焦点,显示不同的背景

edit_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_focused="true"  android:drawable="@drawable/focus_bg"></item>
    <item android:drawable="@drawable/unfocus_bg"></item>
</selector>

最后 使用:

  <EditText
        android:id="@+id/et"
        android:background="@drawable/edit_selector"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:hint="底部下划线" />

提示:如果想刚进入页面的时候,Editext 不自动获取焦点,可以在 Editext的父布局添加属性:

    android:focusable="true"
    android:focusableInTouchMode="true"


具体效果如下:

无焦点时:



获取到焦点时:





猜你喜欢

转载自blog.csdn.net/lijia1201900857/article/details/79237177