我剛剛遇到一些教程代碼示例,它們使用XML中的declare-styleable
和Java代碼中的Context.obtainStyledAttributes
。爲什麼我們需要使用Context.obtainStyledAttributes和declare-styleable來獲得GUI組件的屬性
我的理解是,它試圖獲得的GUI組件的屬性(象背景顏色)。
我在想,爲什麼我們需要經過這些繁瑣的步驟才能獲得簡單的屬性?如果我想每次都檢索一個GUI組件屬性,我必須創建一個新的XML文件,並添加我想要檢索到的XML文件本身的屬性。我們可以做些簡單的事情嗎?
目前,這裏是我需要做的,當我試圖獲得一個GUI組件的屬性。
http://developer.android.com/resources/tutorials/views/hello-gallery.html
創建一個XML文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HelloGallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
有以下Java代碼。
TypedArray a = context.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
我們可以有一些簡單的像
helloGalleryInstance.getBackground();
如鞦韆,這裏是我最常做的,以獲得GUI組件的屬性。這很有趣,很容易。我們可以在Android中有類似的東西嗎?
instaceOfAComponent.getBackground();
你知道爲什麼在Android的HELLO-畫廊教程,強似在上下文到ImageAdapter構造,並用obtainStyledAttributes方法來檢索庫的背景下,爲什麼他們不只是在畫廊的一個實例傳入構造,並調用gallery.getBackground()? –
@Yan程卓:在這種情況下,他們沒有要求該畫廊的背景。他們正在爲圖庫中的項目定義背景。有一個區別。這就是說,我覺得這個特殊的樣本寫得不好。 – CommonsWare