Android 应用开发中如何自定义 Drawable 背景?

2020-02-06

关键字:EditText自定义背景、shape、corners



通过 xml 定义 View 的背景 Drawable 资源还是挺常用的。

本篇博文记录几种常用的自定义 Drawable 方式。

1、圆角矩形

A、普通圆角矩形

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="5dp" />

    <solid
        android:color="@android:color/holo_green_light" />

</shape>

出来的效果如下图所示:

圆角率可以自行微调确定合适的值,也可以通过计算而来。如果想要呈现出一个椭圆形背景,则圆角率的值应等于 View 高度的一半。例如,笔者上图所示 View 的高度为 70dp,要让它的背景呈现椭圆形,则需将圆角率设置为 35dp:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="35dp" />

    <solid
        android:color="@android:color/holo_green_light" />

</shape>

效果如果下图所示:

B、带边框的圆角矩形

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="10dp" />

    <solid
        android:color="@android:color/holo_green_light" />

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

</shape>

效果如下图所示:

2、渐变色背景

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="35dp" />

    <gradient
        android:angle="0"
        android:startColor="#74C941"
        android:endColor="#ffffff"/>

</shape>

出来的效果如下图所示:

渐变方向受 android:angle 标签控制。0度时为从左至右渐变,90度时为从下至上渐变。角度控制渐变方向的关系是逆时针方向旋转。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="35dp" />

    <gradient
        android:angle="90"
        android:startColor="#74C941"
        android:endColor="#ffffff"/>

</shape>

3、状态切换背景

这种背景通常用于按钮。我们常常能遇到某个按钮在未按下时是一种背景色,在按下以后切换到另外一种背景色的需求。这种背景的设置代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_selected="true"
        android:drawable="@android:color/holo_red_light" />

    <item
        android:state_selected="false"
        android:drawable="@android:color/holo_green_light" />

</selector>

效果图如下所示:

  

4、组合圆环背景

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="0dp">
        <shape android:shape="rectangle">
            <corners android:radius="35dp" />
            <solid android:color="@android:color/holo_red_light" />
        </shape>
    </item>

    <item
        android:left="3dp"
        android:top="3dp"
        android:right="3dp"
        android:bottom="3dp">
        <shape android:shape="rectangle">
            <corners android:radius="35dp" />
            <solid android:color="@android:color/holo_green_light" />
        </shape>
    </item>

    <item
        android:left="6dp"
        android:top="6dp"
        android:right="6dp"
        android:bottom="6dp">
        <shape android:shape="rectangle">
            <corners android:radius="35dp" />
            <solid android:color="@android:color/holo_blue_light" />
        </shape>
    </item>

</layer-list>

出来的效果图如下所示:

这种背景图片比较常见的场景有:用户头像背景框。如下图所示:

上图的用户头像就是由上面的圆环背景再加上一个普通图标组合而成的。

5、EditText的背景

EditText 自定义背景的方式与前面普通 View 的一样。都是通过自定义 xml 形式的 Drawable 再将它以 setBackground() 的形式设置进 EditText 即可。同时若要改变 EditText 光标的背景,也是一样,具体参阅下面代码即可:

    <EditText
        android:id="@+id/etOrderNo"
        android:textCursorDrawable="@drawable/edittext_cursor_color"
        android:background="@drawable/activity_main_cdjh_searchbar_et"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"/>

上述加粗标绿的两行即是自定义控件及光标背景的代码。若不想要 EditText 的背景,则直接将颜色设置成透明或者为 null 即可。

以笔者上面的代码为例,EditText 背景 Drawable 为:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape>
            <stroke android:color="@null" android:width="0dp"/>
            <corners
                android:radius="8dp" />
        </shape>
    </item>

</selector>

光标背景的 Drawable 为:

<?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/edittext_cursor" />

</shape>


Android 应用开发中如何自定义 Drawable 背景?

原文地址:https://www.cnblogs.com/chorm590/p/12198762.html

时间: 2024-10-09 06:38:44

Android 应用开发中如何自定义 Drawable 背景?的相关文章

Android软件开发之盘点自定义View界面大合集(二)

Android软件开发之盘点自定义View界面大合集(二) - 雨松MOMO的程序世界 - 51CTO技术博客 雨松MOMO带大家盘点Android 中的自定义View界面的绘制 今天我用自己写的一个Demo 和大家详细介绍一个Android中自定义View中的使用与绘制技巧. 1.自定义view绘制字符串 相信在实际开发过程中必然很多地方都须要用到系统字 为什么会用到系统字? 方便 省内存 我相信做过J2ME游戏开发的朋友应该深知内存有多么多么重要 而且使用它还可以带来一个更重要的好处就是很方

Android应用开发中的风格和主题(style,themes)(转)

Android应用开发中的风格和主题(style,themes) 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验,这些客户端都做得布局合理而且美观.......Android的Style设计就是提升用户体验的关键之一.Android上的Style分为了两个方面: Theme是针对窗体级别的,改变窗体样式: Style是针对窗体元素级别的,改变指定控件或者Layout的样式.      Android系统的themes.xml和style.xml(位于\base\core

Android实际开发中的bug总结与解决方法(一)

                                                                             Android实际开发中的bug总结与解决方法(一) Android开发中有很多bug,我们是完全可以在线下避免的,不要等到线上报的BUG的再去修复.下面是我在实际开发中遇到过的bug和解决方法. BUG 1: java.lang.RuntimeException: Unable to start activity ComponentInfo

Android应用开发中三种常见的图片压缩方法

Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里

android游戏开发中图形绘制:Canvas和Paint的使用

android游戏开发中,使用android.graphics中的类来绘制2D向量图和文字. 一 画布Canvas 在Android中的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法. Canvas代表指定View上的画布,常用方法如图: 二 画刷Paint Paint代表Canvas上的画刷,主要用于绘制风格,包括画刷颜色.画刷笔触粗细.填充风格等. 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关. 常用方法如图: 三 路径Path Path表示

Android应用开发中对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图片的内存优化,是Android应用开发中比较重要的内容. 1) 要及时回收Bitmap的内存 Bitmap类有一个方法recycle(),从方法名可以看出意思是回收.这里就有疑问了,Android系统有自己的垃圾回收机制,可以不定期的回收掉不使用的内存空间,当然也包括Bitmap的空间.那为什么还需

Android开发中的全屏背景显示方案

引子 不管是Android还是iOS平台中,都可以看到一些应用在启动的时候会先出现一个启动画面(Splash Activity),如QQ.微信等.这个启动画面中往往会将ActionBar和Status Bar隐藏掉,然后用户进入一种沉浸的状态,形成更强烈的视觉冲击.一方面,这可以给用户留下更深刻的使用体验,从而产生一定品牌效应:另一方面,也给应用的启动初始化留下了充裕的时间,避免因为启动时间过长而给用户留下不良的印象.因此,全屏显示在手机应用中得到了广泛的应用.那么这篇博客中就记录下全屏显示的一

Android应用开发中的夜间模式实现(一)

前言 在应用开发中会经常遇到要求实现夜间模式或者主题切换具体例子如下,我会先讲解第一种方法. 夜间模式 知乎 网易新闻 沪江开心词场 Pocket 主题切换 腾讯QQ 新浪微博 我今天主要是详述第一种的实现方式: 首先,应用的Application要继承自定义的Theme 1 2 3 4 5 6 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" androi

Android应用开发中如何使用隐藏API(转)

一开始需要说明的是,Google之所以要将一些API隐藏(指加上@hide标记的public类.方法或常量)是有原因的.其中很大的原因就是Android系统本身还在不断的进化发展中.从1.0.1.1到现在即将问世的Android 2.3.4. 这些隐藏的API本身可能是不稳定的,所以,使用隐藏API,意味着程序更差的兼容性. 如果要我给出建议的话,最好还是不要使用隐藏的API.不过有时为了实现Android应用某些特殊的功能或者效果,隐藏的API往往能发挥意想不到的作用.这些API具体能做些什么