【Android学习】XML(Extensible Markup Language,可扩展标记语言)
来源:互联网 发布:淘宝店铺店标素材 编辑:程序博客网 时间:2024/05/19 13:14
1,XML(Extensible Markup Language,可扩展标记语言)
1)概念
W3c组织发布的(该公司也发布了html、CSS、xhtml、html5)。
允许用户自定义标签,描述数据关系。
2)场景
A.保存有关系的数据
B.用作软件配置文件,描述程序模块之间的关系。
比如要求软件启动时,启动什么。
3)组成部分
①文档说明
必有。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
当前文档为xml文档,遵循1.0xml版本,编码方式为UTF-8(GB2312),standalone表示文档是否独立
②元素(element)
命名规范:
区分大小写;
不能以数字或下划线、xml开头;
不能包含空格;
中间不能包含冒号。
③属性
用单引号或双引号引起来。
标签属性所代表的信息也可以用子标签来描述。
如<input name="text">
可以描述为<input><name>text</name></input>
④注释
<!-- -->
⑤CDATA区、特殊字符
在编写 xml文件时,有些内容不想让解析引擎解析执行,而是当作原始内容处理。则把它放在CDATA区。
CDATA区中的呢人会原封不动的输出。
<![CDATA[内容]]>
⑥处理指令(PI,processing instruction)
用来指挥解析引擎如何解析XML文档内容。必须以<?
开头,?>
结尾。
如指令xml-stylesheet。
<?xml-stylesheet type="text/css" href="1.css"?>
4)xml文件命名规范
(a~z)(0~9)(_.)
5)XML约束技术
①XML DTD(文档类型定义Document Type Definitionn)
DTD文件应使用UTF-8或Unicode。在做框架的时候才需要写DTD。
对于本地dtd文档:如文件book.dtd声明xml文档格式,则遵循此dtd文件的xml在写的时候要写:
<!DOCTYPE 书架 SYSTEM "book.dtd">
意思为:所有元素书架,都要遵循dtd文件来写。
或者在xml内部写dtd:
<?xml version="1.0"><!DOCTYPE 书架[ <!ELEMENT 书架(书+)> <!ELEMENT 书(书名,作者)> <!ELEMENT 书名(#PCDATA)> <!ELEMENT 作者(#PCDATA)> ]><书架> <书> <书名>书名</书名> <作者>作者</作者> </书> …</书架>
对于公共的网上dtd文档:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
②XML Schema
2,语法
1)布局
常用布局有LinearLayout,RelativeLayout,FrameLayout,TableLayout,AbsoluteLayout。
LinearLayout
RelativeLayout
FrameLayout
TableLayout
是LinearLayout子类。
2)xml解析
①SAX(Simple SPI for XML)
对性能敏感的数据库或手机上使用。
优点:不占内存空间、解析属性方便。(不用事先调入整个文档,占用资源少)。
缺点:对于嵌套多个分支来说处理不方便。
SAX工作原理:对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作 ,然后继续同样的扫描,直至文档结束。
SAX是一种基于事件的解析器,事件驱动的流式解析方式:从文件开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要围绕事件源以及事件处理器来工作。当事件源产生事件后,调用事件处理器相应的方法,一个事件就可以得到处理。再事件源调用事件处理器特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能根据提供的事件信息来觉得自己的行为。
SAX是单向的
②DOM(文档对象模型,Document Object Model)
PC开发使用较多。
把整个XML文件加载到内存中去。
如果数据量不是很大,推荐使用,在查找方面可以和XPath结合。
这些对象组成一个树形结构:
对于整个XML文档来说,是一个Document对象。
每一个标签为一个Element对象。
文本变成一个Text对象。
属性变成Attr对象。
可以调整JVM大小(默认为64M)来预防内存不足。(编译器里修改VM arguments)
③PULL
在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中经常使用KXML库来解析。
④Dom和Sax解析方法区别
Dom解析的优点是对文档crud(增加Create、读取查询Retrieve、更新Update、删除Delete)方便,缺点是占用内存比较大。
Sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud。
3,控件属性
1)距离单位
①dp(dip,设备独立像素)
与设备硬件有关,不同设备有不同的显示效果。
一般为了支持WVGA、HVGA、QVGA,使用dp可以不依赖于像素。
②px(pixels,像素)
不同设备显示效果相同。
③sp(scaled pixels,放大像素)
注意用于字体显示。设置字体必须使用sp。
1pt约等于2.22sp.
④pt(point)
是一个标准的长度单位,用于印刷业。1pt=1/72英寸。
2)button等没有背景或者RadioButton去掉默认样式的小圆点
android:background="@null"
3)hint相关
android:hint="搜索"android:textColorHint="#03A9F4"
4)EditText
TextView是EditText父类。
4,AndroidManifest.xml
1)软键盘设置
界面对应的activity里加入
android:windowSoftInputMode="adjustPan" 键盘就会覆盖屏幕android:windowSoftInputMode="stateVisible|adjustResize" 屏幕整体上移
2)将Activity设置成窗口样式
在对应的Activity写:
android:theme="@android:style/Theme.Dialog"android:theme="@android:style/Theme.Translucent"
3)configChanges
在对应Activity设置。
如果不设置对应Activity的android:configChanges,切屏会重新调用各个生命周期,切横竖屏各执行一次。
阻止程序在运行时重新加载Activity,除了设置”orientation”,你还必须设置”ScreenSize”。
fontScale:全局字体大小缩放发生改变。
android:configChanges="orientation|screenSize|fontScale|locale|touchscreen|navigation|screenLayout|smallestScreenSize|screenSize|mnc" >
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
android:configChanges="orientation|keyboardHidden"
4)permission
自定义权限permission
5,Android布局优化
1)思想
进来减少布局文件的层级。
(这样Android绘制时的工作量少了)
2)实现
①删除布局中无用的控件和层级
②有选择地使用性能较低的ViewGroup
如果LinearLayout和RelativeLayout二选一,选择LinearLayout。因为RelativeLayout功能比较复杂,布局需要话费更多的CPU时间。
LinearLayout和FrameLayout都是简单高效的ViewGroup。
如果需要通过嵌套的方式完成布局,则增加了布局的层级,用RelativeLayout更好。
③用<include>
标签、<merge>
标签、ViewStub
<include>
用于布局重用,与<merge>
搭配使用,可以降低布局的层级。
ViewStub提供了按需加载的功能,当需要时才会将ViewStub中的布局加载到内存,提高了程序初始化的效率。
<include>
用法
在要添加该include布局文件的xml中添加如下控件:
<include layout="@layout/titlebar"/>
注意:
这个标签只支持layout_开头的属性,android:layout_width
,其他属性android:id
都不支持。
<merge>
用法
与<include>
一起使用,减少布局层级。
如当前布局是一个竖直方向的LinearLayout,这时如果<include>
的布局文件也是竖直方向的LinearLayout,那么<include>
中的LinearLayout是多余的,通过<merge>
可去掉多余的一层LinearLayout。
include布局文件这样写:
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/one"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/two"/></merge>
ViewStub用法
ViewStub继承了View,轻量级,宽高都是0,因此本身不参与任何的布局和绘制过程。
ViewStub的意义在于按需加载所需的布局文件,提高程序性能。
如:网络异常时,没有必要在整个界面初始化时将其加载进来。
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/layout_network_error" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"/>
–panel_import 是layout/layout_network_error这个布局的根元素的id。
按需加载:
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
或者
View improtPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
注意:
当ViewStub通过setVisibility或者inflate方法加载后,ViewStub就被内部的布局替换。
- 【Android学习】XML(Extensible Markup Language,可扩展标记语言)
- 可扩展标记语言XML(Extensible Markup Language)
- XML(Extensible Markup Language) 可扩展标记语言
- XML - 可扩展标记语言 (Extensible Markup Language)
- XML - 可扩展标记语言 (Extensible Markup Language)
- XML(Extensible Markup Language)可扩展标记语言
- 2.XML:Extensible Markup Language可扩展标记语言
- XML即可扩展标记语言(Extensible Markup Language)
- XML(Extensible Markup Language 可扩展的标记语言)简述及读取
- XML—可扩展标记语言(eXtensible Markup Languae)
- XML(EXtensible Markup Language)学习
- Extensible Markup Language (XML)
- XML(Extenxible Markup Language)可扩展标记语言,DTD(Document Type Definition)文档类型定义
- XML(Extensible Markup Language)基础
- Extensible Markup Language (XML) 1.0 (Third Edition)
- XML是eXtensible Markup Language的缩写。
- XML是eXtensible Markup Language的缩写。
- XML是eXtensible Markup Language的缩写
- vector空间重新配置后指向原vector的所有迭代器失效
- 安卓控件集合
- 关于maven web项目创建后,新建jsp文件报错问题
- sps pps分析
- Selenium2(WebDriver):启动浏览器、设置profile&加载插件
- 【Android学习】XML(Extensible Markup Language,可扩展标记语言)
- angularjs2启动项目报ERROR in AppModule is not an NgModule解决方法
- Ubuntu Server安装图形界面全过程
- Angular通信$q服务和promise对象
- qt 运行cmd命令
- curl的另外一种简便写法
- JS/Jquery实现导航栏顶部吸顶效果(一)
- 游戏中常见的作弊方式及对应策略
- Eclipse乱码解决方案总结