一、为什么要自定义style

这是样式与控件本身脱离的一种方式。style就像html中的css,只负责自定义样式。View控件在layout中就只负责声明自己就可以了。

就像这样:

首先在style.xml中自定义一个style

<style name="button_style">
<item name="android:background">#fff</item>
<item name="android:textSize">30sp</item>
<item name="android:textColor">#000</item>
</style>

之后我们在activity_layout中调用:

    <Button
style="@style/button_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试"/>

activity_layout

所以说如果没有style就只能让View与style属性写在一起,就像这样

    <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fff"
android:textSize="30dp"
android:textColor="#000"
android:text="测试"/>

可能这个例子中看不出突出的对比,但是显然当内容庞大的时候第一种方法更好。

缺点:

①、首先这种做法无法复用style。如果其他View也需要复用该style的时候,还需要View自己编写。

②、其次将View与style写在一起是一种很难看的写法,不利于区分。

二、如何自定义style

①、继承android提供的style,继承android提供的style属性

首先,我们可以通过继承android提供预置的style来完成。所以我们讲述一下style的继承

 <style name="button_style">
<item name="android:background">#fff</item>
<item name="android:textSize">30sp</item>
<item name="android:textColor">#000</item>
</style> <!--第一种继承方法-->
<style name="new_button" parent="button_style">
<item name="android:background">#0ac</item>
</style> <!--第二种继承方式-->
<style name="button_style.background">
<item name="android:background">#f3e</item>
</style>

style

两种继承方法都继承了父style的属性,然后通过重写父style的属性。(同JAVA的继承)

那么两个继承方式的区别是什么:

第一种方式是自定义命名。

第二种方式是有阶梯的命名:可以突出自己是修改了parent的哪一部分。

②、自定义View的style

1、自定义一个CustomView(extends View)类

2、编写values/attrs.xml,在其中编写styleable和item等标签元素

<resources>
<declare-styleable name="CustomView">
<attr name="custom_bg" format="color"/>
</declare-styleable>
</resources>

attr

3、使用自定义属性

①、首先可以在style.xml中设定属性

②、在layout中使用Custom的自定属性

4、在CustomView的构造方法中通过TypedArray获取

复习了下自定义style的使用的更多相关文章

  1. VS2012下自定义打开文件对话框

    VS2012下自定义打开文件对话框,MFC的CFileDialog封装了太多,太复杂,绕得头晕,自己封装一个得了 #pragma once #include <objbase.h> #in ...

  2. 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:

    在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...

  3. vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)

    vs 2013下自定义ASP.net MVC 5/Web API 2  模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...

  4. Windows Phone开发手记-WinRT下自定义圆形ItemsControl

    这里的ItemsControl指的是Xaml里的集合控件,包括ListView,GridView等,此篇博客主要参考MSDN Blog的一篇文章,具体出处为:http://blogs.msdn.com ...

  5. 如何在不接入微信API的情况下自定义分享内容(图片、链接、标题)

    方法如下: 1.设置分享title:动态改变document.title值即可: document.title = 'test' 2.设置分享图片:在页面隐藏一张尺寸大于290*290的图(图片需要容 ...

  6. Arcgis for javascript不同的状态下自定义鼠标样式

    俗话说:爱美之心,人皆有之.是的,没错,即使我只是一个做地图的,我也希望自己的地图看起来好看一点.在本文,给大家讲讲在Arcgis for javascript下如何自定义鼠标样式. 首先,说几个状态 ...

  7. CentOS7下自定义目录安装mono+jexus教程

    一.阅读前须知: 1.本文属于安装完Centos7之后的步骤 2.如果还不了解mono,请点击mono 3.本篇主要内容是使用自定义目录安装mono+jexus教程,使用默认目录请查看使用默认目录安装 ...

  8. android 自定义Style初探---ProgressBar

    系统自带的ProgressBar太丑了,所以我决定自定义一个Style. 原来的Style <?xml version="1.0" encoding="utf-8& ...

  9. IOS下自定义click事件使用alert引发的血案

    使用过iscroll插件的同学都知道iscroll支持自定义事件,即在调用iscroll时参数赋值options.click = true. 接下来定义事件如: $clinicAppoint.on(' ...

随机推荐

  1. ROBOTS.TXT屏蔽笔记、代码、示例大全

    自己网站的ROBOTS.TXT屏蔽的记录,以及一些代码和示例: 屏蔽后台目录,为了安全,做双层管理后台目录/a/xxxx/,蜘蛛屏蔽/a/,既不透露后台路径,也屏蔽蜘蛛爬后台目录 缓存,阻止蜘蛛爬静态 ...

  2. Swift--访问级别-备

    访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和private.这些访问修饰符可以修饰类.结构体.枚举等面向对象的类型,还可以修饰变量.常量.下标.元 ...

  3. 【转】深圳FAE,想拿高薪还缺什么?

    原文网址:http://www.eefocus.com/KTHR_IC/blog/11-05/222793_e04c8.html KT老胡您好! 我07年本科毕业在一家医疗民营企业从事了3年多的嵌入式 ...

  4. 【转】Android 定时器实现的几种方式和removeCallbacks失效问题详解--不错

    原文网址:http://blog.csdn.net/xiaanming/article/details/9011193 实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + ...

  5. 【转】VC中TRACE

    原文网址:http://blog.csdn.net/yangsen2016/article/details/1636996 TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能 ...

  6. hdu5035:概率论推公式

    题目大意: 你要去邮局发一个包裹,有n个窗口,每个都有人,每一个窗口完成一次服务的时间 ti 的分布符合几何分布:ki*e^(-ki*t) 每个窗口当前服务已经进行了ci时间 你会去第一个完成当前服务 ...

  7. PHP设计模式笔记七:观察者模式 -- Rango韩老师 http://www.imooc.com/learn/236

    观察者模式 概述: 1.观察者模式(Observer),当一个对象状态发生改变时,依赖他的对象全部会收到通知,并自动更新 2.场景:一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在事件的代 ...

  8. android分享到新浪微博,认证+发送微博,

    分享到新浪微博,折腾了大半个月,现在终于弄出来了,心里的那个爽呀,太痛快了,哈哈!! 废话少说,首先是认证, 1.进入新浪微博提供的开放平台http://open.weibo.com/ 注册新浪账号. ...

  9. [RxJS] Reactive Programming - Sharing network requests with shareReplay()

    Currently we show three users in the list, it actually do three time network request, we can verfiy ...

  10. ListView的Item被点击和其中的Button被点击同时生效

    Android开发中在ListView中经常有Button或ImageButton等需要被点击的控件,如果不加一些特殊的限制,有可能 ListView的Item的点击事件或Button的点击事件,其中 ...