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> 即可