http://www.linuxidc.com/Linux/2011-03/33356.htm
有时候我们想在标准的Framework中添加自己的新的资源怎么办呢?
办法就是我们来尝试下。
通过Eclipse的联系,我们可以联想到是否就是简单的把字符串放在res的各个文件夹里面。先来试试看,编译,系统立即报错。为什么呢?
它提示你利用make update-api这个命令来更新public.xml文件或者把这个声明称hide类型。这个肯定不是我们想要的。
所以方法有二:
方法1:正常添加完资源后,执行make update-api函数。系统更新res/values/public.xml文件。
方法2:正常添加完资源后,手动更改/res/values/public.xml文件。打开public.xml文件。
转自:
http://hi.baidu.com/76591203/blog/item/1744fdce01210a1093457ecd.html
FRAMEWORK层开发(转)
2011-02-17 12:46
framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。
最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。
我花大力气的地方是资源文件夹下values中几个文件的作用。
attrs.xml中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。
styles.xml中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。
themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。
ids.xml是公共的id,也就是对应用层可见的id,id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到
public.xml描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。
当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。因为这些值按类型被放在不同的段上,类型相同的必须连续存放,不指定id值的话系统会自动计算出下一个值。
添加id的方法:1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。
2)在ids.xml中添加公共id项,每一项前面加一行<!-- @hide -->的注释,这样就不用在public.xml中添加相应的项了。源码中是/** @hide */的形式,这样current中就不会有相应的段了。
3)在自己写的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。
分享到:
相关推荐
using System.Xml.Serialization; public class MyObject { public string Name { get; set; } public int Age { get; set; } } public void SerializeObject(MyObject obj, string filePath) { XmlSerializer ...
using System.Xml.XPath; class Program { static void Main() { XPathDocument xpathDoc = new XPathDocument("Config.xml"); XPathNavigator nav = xpathDoc.CreateNavigator(); // 使用XPath查询获取节点 ...
在C#编程中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它具有结构化、易于解析和生成的特点。本篇文章将详细介绍如何在C#中读取和操作XML文件,以及如何利用Visual Studio 2017进行开发。 1. *...
在C#编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换和存储格式,广泛应用于各种应用程序中。XML的灵活性和结构化特性使得它成为处理数据的理想选择。本篇将详细介绍C#中如何使用XML文件,包括...
1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在互联网上交换、存储和处理结构化数据。它是.NET平台的重要组成部分,提供了丰富的API和类库来支持XML的处理。在.NET中,XML操作主要涉及到...
public User getCurrentUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated()) { Object ...
最后,如果以上步骤无法解决问题,可以参考链接中的博客或其他在线资源,寻找更具体的解决方案。记住,理解Spring MVC的工作原理,以及HTTP请求和session的生命周期,对于定位和解决这类问题至关重要。同时,使用...
在本教程中,我们将深入探讨如何在基于IntelliJ IDEA(IDEA)的SSH(Spring、Struts2和Hibernate)项目中集成Hibernate框架。SSH是一个流行的企业级Java应用开发框架组合,而Hibernate作为ORM(对象关系映射)工具,...
此外,根据需求,你可能需要对配置文件进行读取、解析和更新,这些都可以使用.NET Framework中的`System.Xml.Linq`或`Newtonsoft.Json`库来实现。 总的来说,拷贝文件到WPF应用的当前目录是一项常见的任务,通过...
在Spring和Hibernate整合的图书馆信息系统中,`BookDao`接口定义了对图书信息的基本操作,包括保存、删除、更新和查询。为了实现这个接口,我们需要创建一个`BookDaoImpl`类,使用Hibernate的Session来操作数据库,...
在 Spring Boot 中,除了使用官方推荐的 Spring Security 来实现安全控制外,还可以选择 Apache Shiro 进行集成,实现更加灵活的权限管理和认证机制。 1. **添加 Shiro 依赖** - 在 `pom.xml` 文件中添加 Shiro 的...
同时,为了使Hibernate的Session与Spring的事务生命周期同步,还需要在Hibernate的配置文件(如`hibernate.reveng.xml`)中启用`current_session_context_class`属性,设置为`org.springframework.orm.hibernate5....
(再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前...
- **applicationContext.xml**:Spring的核心配置文件,配置了Bean的声明周期管理和依赖注入。 ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...
ime.now(), Thread.currentThread().getName()); ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1, r -> { Thread t = new Thread(r); t.setName("ScheduledThreadPoolExecutorDemo"); ...
本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...
Java 提供了多种方式来处理配置文件,包括传统的属性文件(.properties)和结构化的 XML 文件。 1. **属性文件配置**: 属性文件是一种简单的文本格式,以键值对的形式存储数据。`java.util.Properties` 类是 Java...