巧用style的另类写法
看到style,不少人可能会说这个我知道,就是控件写属性的话可以通过style来实现代码的复用,单独把这些属性及其参数写成style就可以便捷的调用。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomText" parent="@style/Text">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#008</item>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<EditText
style="@style/CustomText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello, World!" />
这种写法呢其实比较常见,如果有某些控件用到了相同的风格,就可以用style来作,今天要讲的不是这种写法,下面先看一下案例
<EditText id="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/hello_world" />
请注意其中的 android:textColor="?android:textColorSecondary" ,这里给的是一个reference,而且是系统的资源。官网上有写介绍http://developer.android.com/guide/topics/resources/accessing-resources.html
这种写法叫做“Referencing style attributes”即引用风格属性,那么怎么引用自定义的东西呢,是首先需要定义attributes,这和自定义控件时写的style声明是一样的,遵照下面的格式定义一个activatableItemBackground的属性,值得类型是reference引用类型,
<resources>
<declare-styleable name="TestTheme">
<attr name="activatableItemBackground" format="reference"></attr>
</declare-styleable>
</resources>
接着定义我们的theme,并且把这个属性用上去,theme实际上也是style,只是针对Application和Activity时的不同说法而已。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="activatableItemBackground">@drawable/item_background</item>
</style>
</resources>
theme写好后我们把它应用到application或者某个activity,
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.avenwu.sectionlist.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
这些准备工作完成后,恭喜你现在可以用 ?[<package_name>:][<resource_type>/]<resource_name>的方式来写布局了,注意开头是?不是@。
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView"
android:gravity="center"
android:background="?activatableItemBackground"
android:clickable="true"
android:layout_gravity="left|top"/>
这个TextView用两个?,一个引用系统资源,background则用了我们刚刚准备的资源。
最后我们来讲一下,为什么用这种方式,实际上这种写法主要是剥离了具体的属性值,好比我们的background,现在对应的值不是一个确定的值,它依赖于theme里面的具体赋值,这样的话如果需要更换主题风格我们就不需要针对每个布局改来改去,只要重新写一个对应不同资源的theme就可以了。当然即使不用做换肤也完全没问题,这里只是提供另一个思路来写布局的属性。
巧用style的另类写法的更多相关文章
- .net EasyTree显示所级层级(无限级、整层级颗树)的另类写法。非递归
获取整颗树的另类写法.非递归 //获取所有的菜单 List<T_Menu> menu = bll.getMenuByUsesrID("8189a7c1-6f15-4744-b6c ...
- js获取元素位置和style的兼容性写法
今天说一下js获取元素位置和style的方法.当然不只是element.style那么简单.. 主角:getBoundingClientRect,getClientRects,getComputedS ...
- javascript另类写法
今天来介绍一下javascript不一样的写法,很简单哦. 1.当条件成立时执行a方法,当条件失败是执行b方法 通常我们会这样写: var result; if(isOk){ result=funA( ...
- addEventListener 的另类写法
addEventListener 参数如下 addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useCa ...
- Tip提示框另类写法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- sql查询条件为空的另类写法o( ̄▽ ̄)d
简单描述:今天看老大提交的代码,发现了一个有意思的事情,一条sql中判断条件是空,老大的写法,让我眼前一亮.直接上代码 代码: <select id="getxxxs" re ...
- 动态class,style,src绑定写法 vue
:class="{active:menuName===item.title}" :style="thisTitle==='一张图展示'?styles:''" : ...
- logstash中output{}的另类写法
日志传输路径如下: filebeat->redis->logstash->es 在filebeat配置文件中,收集日志的时候配置的有如下参数: fields: log_source: ...
- 项目名 的在JSP或JAVA中的另类写法
在JSP页面中${pageContext.request.contextPath } 表示项目名<form action="${pageContext.request.contextP ...
随机推荐
- WCF - 服务实例管理模式
WCF 提供了三种实例上下文模式:PreCall.PreSession 以及 Single.开发人员通过 ServiceBehavior.InstanceContextMode 就可以很容易地控制服务 ...
- listview 两个Item可以同时点击
android:splitMotionEvents="false" ListView的这个属性可以限制它不能同时点击两个Item
- calcite 理论
https://blog.csdn.net/yunlong34574/article/details/46375733 https://cloud.tencent.com/developer/arti ...
- Oracle根据表生成系统流水号
1.建表tablewater create table TABLEWATER ( tb_id INTEGER not null, vc_table_name ), num_water_no ) )vc ...
- 项目中开机自启动的 node-webkit开机自启动
node-webkit开机自启动 Posted in 前端, 后端 By KeenWon On 2014年8月11日 Views: 1,215 node-webkit没有提供开机自启动的接口,在git ...
- 三角形(css3)
.userCard .sanjiao {//三角形的制作: width: 0; height: 0; border-left: 10px solid transparent; border-right ...
- SQL Server 商业智能
原帖:http://bbs.51cto.com/thread-1089708-1.html 商业智能概述一.数据仓库与分析服务(SSAS)二.集成服务(SSIS)三.报表服务(SSRS)以下是SQL ...
- 通过python-libvirt管理KVM虚拟机 代码实现
初步代码 <span style="font-size:18px;">''''' Work with virtual machines managed by libvi ...
- django 事务错误 -- Transaction managed block ended with pending COMMIT/ROLLBACK
Request Method: GET Request URL: http://192.168.128.111:8000/×××/××××/ Django Version: 1.4.8 Excepti ...
- eclipse中git更新操作
1,本地已经修改的代码不要commit和push 2,选中工程,右击Team,然后点击Fetch from Upstream,从远程服务器拉取最新的代码 3,上一步操作完成,再右击工程,选中Team, ...