android獲取屬性值
1. android 已知控制項的id名 怎麼得到其id值
Android中的組件需要用一個int類型的值來表示,這個值也就是組件標簽中的id屬性值。id屬性只能接受資源類型的值,也就是必須以@開頭的值,例如,@id/abc、@+id/xyz等。 如果在@後面使用「+」,表示當修改完某個布局文件並保存後,系統會自動在R.java文件中生成相應的int類型變數。變數名就是「/」後面的值,例如,@+id/xyz會在R.java文件中生成int xyz = value,其中value是一個十六進制的數。如果xyz在R.java中已經存在同名的變數,就不再生成新的變數,而該組件會使用這個已存在的變數的值。 也就是說,如果使用@+id/name形式,當R.java中存在名為name變數時,則該組件會使用該變數的值作為標識。如果不存在該變數,則添加一個新的變數,並為該變數賦相應的值(不會重復)。 既然組件的id屬性是一個資源id就可以,那麼自然可以設置任何已經存在的資源id值,例如,@drawable/icon、@string/ok、@+string/you等。當然,也可以設置android系統中已存在的資源id,例如,樓主提出的@id/android:list,那麼這個android是什麼意思呢,實際上,這個android就是系統的R類(在R.java文件中)所在的package。我們可以在Java代碼編輯區輸入android.R.id.,就會列出相應的資源id,例如,也可以設置id屬性值為@id/android:message。 <ListView android:id="@+id/android:message" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 還有另外一種方法查看系統中定義的id,進入<android sdk安裝目錄>\platforms\android-1.5\data\res\values目錄,找到ids.xml文件,打開後,內容如下: <?xml version="1.0" encoding="utf-8"?> <resources> <item type="id" name="price_edit">false</item> <item type="id" name="amount_edit">false</item> </resources> 若在ids.xml中定義了ID,則在layout中可如下定義@id/price_edit,否則@+id/price_edit
2. 急問!!!Android中如何獲取或者定義AttributeSet參數
Android中如何獲取AttributeSet參數的方法如下:
1.Attributeset自定義控制項和其他的控制項一樣,應該寫成一個類,而這個類的屬性是是有自己來決定的.
2.首先要在res/values目錄下建立一個attrs.xml的文件,並在此文件中增加對控制項的屬性的定義.
3.使用AttributeSet來完成控制項類的構造函數,並在構造函數中將自定義控制項類中變數與attrs.xml中的屬性連接起來.
4.在自定義控制項類中使用這些已經連接的屬性變數.
5.將自定義的控制項類定義到布局用的xml文件中去.
6.在界面中生成此自定義控制項類對象,並加以使用.
3. android xml資源數組的問題 ,xml文件內容如下,我要怎麼獲取item鍵值對中name這個屬性的值
讀取數據代碼:getValue(this,"第四");
public String getValue(Context context, String strText) {
String strData = "";
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
InputStream inputStream = null;
// 首先找到xml文件
factory = DocumentBuilderFactory.newInstance();
try {
// 找到xml,並載入文檔
builder = factory.newDocumentBuilder();
inputStream = context.getResources().getAssets()
.open("data.xml");
document = builder.parse(inputStream);
// 找到根Element
Element root = document.getDocumentElement();
NodeList nodes = root.getElementsByTagName("item");
// 遍歷根節點所有子節點
Element cardElement;
String strName;
String strValues;
for (int i = 0; i < nodes.getLength(); i++) {
cardElement = (Element) (nodes.item(i));
strName = cardElement.getAttribute("value");
Element eValues = (Element) cardElement
.getElementsByTagName("item").item(0);
strValues = eValues.getFirstChild().getNodeValue();
if (strValues.equals(strText)) {
strData = strName;
break;
}
if (i == nodes.getLength() - 1) {
Log.v(TAG, "未查到相關信息。。。");
strData = "";
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return strData;
}
4. Android屬性系統簡介及使用
Android 里有很多屬性(property),每個屬性都有一個名稱和值,他們都是字元串格式。這些屬性定義了 Android 系統的一些公共系統屬性。借用大神的一句話,系統屬性就是 真·全局變數
屬性變更的請求時init事件循環處理的另一個事件,在Android平台中,為了讓運行中的所有進程共享系統運行時所需要的各種設置值,系統開辟了屬性存儲區域,並提供了訪問該區域的API。屬性由鍵(key)與值(value)構成,其表現形式為「鍵=值」。
在Android平台中,在訪問屬性值時,添加了訪問許可權控制,增強了訪問的安全性。系統中所有運行中的進程都可以訪問屬性值,但僅有init進程才能修改屬性值。其他進程修改屬性值時,必須向init進程提出請求,最終由init進程負責修改屬性值。在此過程中,init進程會先檢查各屬性的訪問許可權,而後再扒余修改屬性值。
當屬性值更改後,若定義在init.rc文件中的某個特定條件得到滿足,則與此條件相匹配的動作就會發生,每個動作都有一個觸發器,決定動作的執行時間,記錄在「on property」關鍵字後的命令即被執行。
個人看來屬性系統有一下四個優點,當然缺點也很明顯,只能支持三種基本類型:string、int、boolean
當編寫本地應用程序時,可以使用 property_get 和 property_set 這兩個API來讀取/設置屬性。要使用它們,我們需要 include cutils/properties.h,並鏈接 libcutils 庫。
以上就是 properties.h 中申明的所有方法,其中 property_set 返回 0 表示執行成功,返回值 <0 表示失敗。
java 層調用 /frameworks/base/core/java/android/os/SystemProperties.java 中的 set 和 get 方法即可設置和獲取系統屬性
通過 JNI 最終調用的還是 /system/core/libcutils/properties.c 中的 property_get 和 property_set
Android toolbox 程序提供了兩個工具: setprop 和 getprop 獲取和設置屬性。其使用方法:
可以通過命令adb shell: getprop查看手機上所有屬性狀態值。
默認情況下,設置屬性只會使 "init" 守護程序寫入共享內存,它不會執行任何腳本或二進製程序。但是,您可以將您的想要的實現的操作與init.rc中某個屬性的變化相關聯拍此巧.例如,在默認的init.rc中有:
這樣,如果你設置persist.service.adb.enable為1 ,"init"守護程序就知道需要採取行動:開啟adbd服務。
只有有許可權的進程才能修改屬性,要不隨便寫一個就改系統屬性那當黑客也太容易了。許可權相關定義襲鍵在下面兩個文件里:
其實一般應用程序都不會去修改系統屬性,所以也不用太在意。
在開機啟動後的init操作中,會執行一個loop循環,當檢測到有新的設置時,進入設置流程,鑒權失敗會提示相關的異常,如sys_prop: permission denied uid:1000 name:gsm.phone.id
通過以上介紹我們可以了解什麼是系統屬性,如何使用,以及一些需要注意的地方。後面會詳細介紹相關原理。