androidxml格式化
A. 关于android解析XML 的问题: xml 内容如下:
先说错误的地方:在 endElement()方法中没有将tagName设置为“”,导致解析上的错误
<resource>
<name>rain.mp3</name>
<size>123</size>
</resource>
LZ我给你解释下详细的执行过程
1.<resource>这个后氏亩亮面其实还有 \n 。
android解析XML采用的sax方式解析,也就是逐行解析。解析最后这个 \n 的时候也会调用characters() 。
2. <name>rain.mp3</name>解析到这里的。前面还有两个 \t\t(制表符)也会调用 characters()。
解析到标签中的rain.mp3时也会调歼宽用characters() 。准确的说调用characters() 是7次
你再试试,我耐拦没有调试 还有错误再留言
B. AndroidManifest.xml 文件格式解析
图片左侧为解压开apk后,AndroidManifest.xml的二进制内容,右侧为各个chunk的解析。各个chunk和对应的二进制内容通过相同的颜色标记。
Android逆向三部曲之AndroidManifest.xml 文件格式 : https://www.jianshu.com/p/f0f4856866e0
AndroidManifest二进制文件格式分析: https://bbs.pediy.com/thread-194206.html
手把手教你解析AXML: https://blog.csdn.net/beyond702/article/details/51830108?spm=1001.2014.3001.5502
大小端模式: https://blog.csdn.net/q2519008/article/details/80961176
ResourceTypes.h 源文件: http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h
C. Android XML文件中的@、、@+的意义
Android XML文件中的@、?、@+的意义
在android开发中,资源文件里总是会出现
"@string/hello"、“@android:color/darker_gray”、"@+id/title"、"?android:attr/textAppearanceSmall",那么这些究竟有什么不同呢?其实这些都是对资源的引用。
1、首先来看这种,@string/hello,这个的语法是:@[:]/,其中包名是可选的,代表资源是你自己这个包中的,如下图中的例子
2、然后是“@android:color/darker_gray”,与上一个相比,它多侍竖了”android:“,语法是相同的.,它代表引用的是系统资尺谈答源。
3、"@+id/title",多了个加号,代表引用或创建,若不存在,则创建,若存在,则引用。
4、"?android:attr/textAppearanceSmall",语法是?[:][/],代表引陵慧用的是主题中的样式属性资源。
5、步骤四中的资源类型是可以省略的。可以这样写:?android:textAppearanceSmall ;
D. android中xml中有些控件的属性里面有 "app:.." ,此处的app:是什么意思和一般的android:有什么区别
区别是:这两个是声明的不同的命名空间,android的是系统的,app是自定义的。
Android自定义控件的属性,在xml中使用自己自定义的attr的时候,其中有一步就是要自定义一个xml的命名空间后然后再给自定义属性赋值,现在发现不知道什么时候开始Android把这个改了,现在发现可以统一用
xmlns:app="http://schemas.android.com/apk/res-auto"
而不是原来的:
xmlns:app="http://schemas.android.com/apk/App的Package名"
还有人提到在作为lib被使用的时候,也应该用res-auto
所以说区别就是如果你http://schemas.android.com/apk/后面写的是res/包名,那就是相关包名下的自定义属性,而res-auto就是所有的自定义包名。
E. Android 关于string.xml存值的问题
使用<b>和<b>来打印出<b></b>
这样的文字;“<”表示“<”的意思;
使用textView.setText(Html.fromHtml("Hello
<b>World</b>,<font size=\"3\"
color=\"red\">AnalysisXmlActivty!</font>"));设置类似于html那样的效果
如果你需要使用 String.format(String, Object...)
来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:
<string
name="welcome_messages">Hello, %1$s! You have %2$d new
messages.</string>
在这个例子中,这个格式化的字符串有2个参数, %1$s是个字符串 %2$d
是个浮点数,你可以在你的程序中按照下面的方法来根据参数来格式化字符串:
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages),
username, mailCount);
那么根据例子上说的我需要把%s换成%1$s才行了,修改后编译通过,程序成功启动。
问题补充:如何在<string></string>中使用%号
有两个办法可供选择
1.用%%来表示1个%,和转意符号 \ 的用法相同
2.如果你的字符串不需要格式化,可以在你的<string
标签上增加一个属性:formatted="false"例如 <string name="test" formatted="false">% test
%</string> 即可