摘要:前言對于程序員來說布局文件我們幾乎每天都會寫好幾個而恰恰是很多每天都會用到的東西往往因為習慣了而忽略對其原理的探究對文件的認知反射配置文件定義格式疑問大家應該都有過這樣的需求在代碼中根據實時的數據通過代碼動態控制而在使用的過程中就會明顯的感
前言
對于 Android 程序員來說, 布局 XML 文件我們幾乎每天都會寫好幾個, 而恰恰是很多每天都會用到的東西, 往往因為「習慣了」而忽略對其原理的探究.
[toc]
對XML文件的認知 反射 & 配置文件 定義格式 & 疑問大家應該都有過這樣的需求, 在代碼中根據實時的數據, 通過代碼動態控制 UI.
而在使用的過程中就會明顯的感覺到 xml 定義 布局的便利性. 而在使用代碼控制的過程中, 發現 xml 中出現的屬性在代碼控制時都有相應的 get/set方法. 這不由得使我聯想到 javaWeb spring 框架的 spring Bean.
而通過猜想和搜索相關資料驗證, 內部確實是通過反射機制實現的.
使用反射的目的javaWeb 開發, SSH 框架中的 spring 強大的 IOC 容器, 通過注解, XML配置和反射, 實現了控制反轉和依賴注入.
使用spring框架后, 基本見不到new對象的情況, 而是使用配置文件的形式實例化對象.
而反射給我印象深刻的一句話就是:
當你的程序編寫完成, 并編譯成為可以正常運行的軟件后, 如果之后要實現功能的更改, 是否只能重新編輯源代碼并再次編譯?
目的在于方便重用和減低耦合度, 減少項目變動所牽連的組件. 這就需要使用配置文件, 而最常見的配置文件格式就是 xml.
低耦合舉例: 業務邏輯代碼中不能夠出現和JDBC有關的代碼, 日后業務擴展, 更換數據庫系統,業務代碼不會受到影響, 只需要在配置文件中更換反射類名即可更換JDBC實現類.
Android UI XMLNameSpace
xmlns :意為xml命名空間(name space).
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
相當于java文件中的「import」, 命名空間主要是因為, 不可避免的類名, 屬性名重復, 通過添加前綴以分類, 保證唯一性.
之后在下方使用android:text時相當于寫下了http://schemas.android.com/apk/res/android:text
tools xlmnstools:context=”com.example.test.MainActivity”
標示上下文, 也就是相關聯的Activity.java文件. 因為布局顯示可以在, AndroidManifest.xml,Activity.java,res/layout, 多處同時定義, 使用此屬性關聯,以達到在布局可視化界面, 所見即所得的效果.
tools:text
我們經常遇到 textView 在代碼中動態定義時, 可視化預覽界面無內容, 不方便預覽. 此時使用android:text=””臨時預覽有可能忘記刪除. 這時就用到了 tools: 命名空間.
Tools:text=”” 會在可視化界面顯示, 而不會在實際運行時生效.
在顯示布局時, 框架會讀取指定目錄下的xml文本, 通過遞歸遍歷整個布局樹形嵌套結構. 再經過反射形成內存中的對象. (根元素-子元素結構 類比 文件夾-文件結構).
LinearLayout 為元素名,對應經過反射后生成的類名.
其后以鍵值對形式定義.是在初始化LinearLayout對象的成員屬性, 相當于構造器.
用于自定義控件中的自定義屬性命名空間
總結通過以上的探究過程, 也就解釋了, 為什么控件存在兩種使用方式, 而且代碼中調用的方法名和屬性名與XML文件中極其相似的現象. 而遵從”低耦合”的軟件項目設計思想, 同時抽取組件定義方便重用和更改, Google官方推薦在XML中定義組件也是理所應當的.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110351.html
閱讀 3166·2021-11-23 09:51
閱讀 678·2021-10-14 09:43
閱讀 3199·2021-09-06 15:00
閱讀 2403·2019-08-30 15:54
閱讀 2557·2019-08-30 13:58
閱讀 1840·2019-08-29 13:18
閱讀 1372·2019-08-27 10:58
閱讀 506·2019-08-27 10:53