Android自定义控件背景及其Drawable以实现扁平化

扁平化?

人们都说扁平化是从IOS和WindowsPhone那边吹过来的邪风,但是不可否认:扁平化是我见过的最舒服、最自然的表现方式。从开发角度上来讲,扁平化的设计可以使得我们从许多屏幕适配和尺寸调节的工作中解放出来(虽然只是那么一点点),更加关注功能;而在在使用层面上,只要文化水平不是特别地低(没有恶意),拟物化的那点提示作用也不是那么明显,当然这里不是说拟物化不好,总之:相对于其他表现方式,扁平化碉堡了。

咱们也做一个扁平化

上面说了,扁平化的控件其实在开发中是非常容易的。这里让我们一起动手,实现下面这个效果(红色部分为本文讲解部分,蓝色的你可以自行练习完成):

上图中所有的元素都很简单,其本质都是一个带有黑色边框,无填充背景的View(Button(图中1处),ViewGroup(图种2处))。

为View(途中1处)定义一个扁平化的背景

从上面的分析可知,我们只需要给组件定义一个扁平化了的背景,并且在布局上尽量追求简洁即可实现扁平化效果。下面是一个粗0.5dp、填充色为白色的背景:

bordered_black_blue_bg.xml

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

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

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

    <stroke
        android:width="0.5dp"
        android:color="@android:color/black" />

</shape>

如果有对Android中shape的使用不熟的朋友,可以参考下这位同学的总结或参考官方api文档。

我们的设计中还包括:用户点击按钮时,背景色变为蓝色。所以,上面的drawable资源也仅仅是默认状态下的显示,下面我们再创建一个扁平化Button按下时的效果:

bordered_black_blue_bg_pressed.xml

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

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

    <!-- 自定义的浅蓝色 -->
    <solid android:color="@color/blue" />

    <stroke
        android:width="0.5dp"
        android:color="@android:color/black" />

</shape>

接下来我们根据上面两个drawable文件为Button建立一个selector对象。

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

    <item android:drawable="@drawable/bordered_black_blue_bg_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/bordered_black_blue_bg"/>

</selector>

为ViewGroup定义一个扁平化背景

观察上图2处可知,ViewGroup的背景和View在正常状态下的背景是一致的。所以他们的drawable文件内容是一致的。

bordered_black_bg.xml

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

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

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

    <stroke
        android:width="0.5dp"
        android:color="@android:color/black" />

</shape>

2处的那些小条目的布局文件:

view_info_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bordered_black_bg"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="@dimen/default_padding" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:maxWidth="@dimen/info_item_max_text_width"
        android:text="chinese address" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/margin_large"
        android:text="北京市\n朝阳区\n大望路\n34号n34号n34号n34号n34号n34号" />

</LinearLayout>

ListView的扁平化处理

根据上面的介绍,我们已经可以做出一个非常“带感”的扁平化的按钮了(或TextView、等等),为了使的图种2处的这些小条目可以滚动并易于管理,我们把它放到ListView中,下面是上图的布局文件:

fragment_department_detail.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="@dimen/default_padding" >
	<!-- 这是我自定义的View,对应于上图中的蓝色部分,可作为你的练习作业 -->
    <org.xiaom.butler.view.TopNav
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_large" />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_large"
        android:text="Baby Home Care Center"
        android:textSize="@dimen/text_size_larger"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="宝贝家早教中心"
        android:textSize="@dimen/text_size_large" />

 	<!-- 此Button使用了之前定义的扁平化背景@drawable/selector/selector_button_normal_bg -->
    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_large"
        android:background="@drawable/selector_button_normal_bg"
        android:text="Show Taxi Card"
        android:textColor="@android:color/black"
        android:textSize="@dimen/text_size_large"
        android:textStyle="bold" />
	<!-- 注意divider及dividerHeight这两个属性 -->
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@null"
        android:divider="@null"
        android:dividerHeight="@dimen/list_dirver_height"
        android:paddingBottom="@dimen/list_view_padding_v"
        android:paddingTop="@dimen/list_view_padding_v" >
    </ListView>

</LinearLayout>

我们知道,ListView在默认情况下丑的一逼,而且还item之间还没有间隔,简直不忍直视~~~~~为了使得ListView也能赶上扁平化这股春风,我们需要对其进行配置。

  • android:divider="@null",配置ListView内Item的间隔为@null,即——没有间隔。
  • android:dividerHeight="@dimen/list_dirver_height",配置分割的高度即——item之间的间隔“距离”。上面的xml中,间隔为5dp

为ListView填充自定义的数据,这里就不说了,继承一个BaseAdapter即可。启动Activity也不说了,这里是本次博文的源码。

任何需要积分的下载都是耍(da)流(sha)氓(bi)。

Android自定义控件背景及其Drawable以实现扁平化

时间: 2024-10-25 00:34:36

Android自定义控件背景及其Drawable以实现扁平化的相关文章

android 自定义标签的使用,实现扁平化UI设计

2014年8月6日11:06:44 android对自定义标签的使用,实现扁平化UI设计: 1.attrs.xml文件中自定义标签 如: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="first"> //reference指的是是从string.xml引用过来 <attr name="nam

(转)Android 之自定义控件样式在drawable文件夹下的XML实现

Android自定义控件样式在drawable文件夹下的XML中,在布局文件中通过设置控件的background属性达到效果. 一.控件常见状态: 在XML文件中用到了selector节点,selector可以理解为状态切换器,不同的状态下切换不同的样式,各种状态用Item节点表示,以下为一些常见的状态 (注意:statelist中第一个匹配当前状态的item会被使用.因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后,各种状态可以交叉使用):

android 自定义控件---圆形方向盘

在做Android平台开发的时候,经常会遇到安卓原生控件无法满足需求的情况,安卓允许开发者去继承已经存在的控件或者实现你自己的控件. 先来看一下效果图 采用直接集成View类,重写onDrow方法绘制. 下面附上主要代码. 1 新建一个类CircleView 继承自View 1 package com.lennon.view; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import androi

Android自定义控件_View的绘制流程

每一个View/ViewGroup的显示都会经过三个过程:1.measure过程(测量View显示的大小,位置):2.layout过程(布局view的位置):3.draw过程(上一篇文章说到的通过canvas绘制到界面上显示,形成了各色的View) 下面分析一下各个过程:measure过程: 因为DecorView实际上是派生自FrameLayout的类,也即一个ViewGroup实例,该ViewGroup内部的ContentViews又是一个ViewGroup实例,依次内嵌View或ViewG

Android自定义控件之滑动开关

自定义开关控件 Android自定义控件一般有三种方式 1.继承Android固有的控件,在Android原生控件的基础上,进行添加功能和逻辑. 2.继承ViewGroup,这类自定义控件是可以往自己的布局里面添加其他的子控件的. 3.继承View,这类自定义控件没有跟原生的控件有太多的相似的地方,也不需要在自己的肚子里添加其他的子控件. ToggleView自定义开关控件表征上没有跟Android原生的控件有什么相似的地方,而且在滑动的效果上也没有沿袭Android原生的地方,所以我们的自定义

Android自定义控件——开源组件SlidingMenu的项目集成

转载请注明出处:http://blog.csdn.net/allen315410/article/details/39611355  在实际项目开发中,定制一个菜单,能让用户得到更好的用户体验,诚然菜单的样式各种各样,但是有一种菜单--滑动菜单,是被众多应用广泛使用的.关于这种滑动菜单的实现,我在前面的博文中也介绍了如何自定义去实现,请参考Android自定义控件--侧滑菜单,这篇博文描述的是如何从无到有创建一个侧滑菜单的控件,里面的代码不多,但是处理的逻辑和各种效果比较复杂,如果稍有不慎,这种

Android自定义控件之自定义ViewGroup实现标签云(四)

前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言道:“好记性不如烂笔头,光说不练假把式!!!”,作为一名学渣就是因为没有遵循这句名言才沦落于此,所以要谨遵教诲,注重理论与实践相结合,今天通过自定义ViewGroup来实现一下项目中用到的标签云. 需求背景: 公司需要实现一个知识点的标签显示,每个标签的长度未知,如下图所示 基本绘制流程: 绘制原理

Android自定义控件View(三)组合控件

不少人应该见过小米手机系统音量控制UI,一个圆形带动画效果的音量加减UI,效果很好看.它是怎么实现的呢?这篇博客来揭开它的神秘面纱.先上效果图 相信很多人都知道Android自定义控件的三种方式,Android自定义控件View(一)自绘控件,Android自定义控件View(二)继承控件,还有就是这一节即将学习到的组合控件.我们通过实现圆形音量UI来讲解组合控件的定义和使用. 组合控件 所谓组合控件就是有多个已有的控件组合而成一个复杂的控件.比如上图的音量控件就是一个完美的组合控件.我们来分析

Android自定义控件系列三:自定义开关按钮(三)--- 自定义属性

尊重原创,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/40855377 接之前的:Android自定义控件系列二:自定义开关按钮(一)和Android自定义控件系列三:自定义开关按钮(二)继续,今天要讲的就是如何在自定义控件中使用自定义属性,实际上这里有两种方法,一种是配合XML属性资源文件的方式,另一种是不需要XML资源文件的方式:下面我们分别来看看: 一.配合XML属性资源文件来使用自定义属性: 那么还是针对我们之前写的自定义