2011-02-25 42 views
4

我剛剛遇到一些教程代碼示例,它們使用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(); 

回答

5

其實,有很多比這更多了。使用樣式和獲取屬性的技術是允許自定義組件的使用者使用您爲控件定義的XML屬性的一種方法。例如,您可能會創建一個具有字幕文本大小屬性的TitleWithSubtitle控件。這種技術可以讓你從佈局XML中獲得價值。你仍然可以爲控件本身添加一個getSubtitleTextSize()方法,但是這會起到不同的作用。

0

要獲得View的背景,請撥打getBackground()

+0

你知道爲什麼在Android的HELLO-畫廊教程,強似在上下文到ImageAdapter構造,並用obtainStyledAttributes方法來檢索庫的背景下,爲什麼他們不只是在畫廊的一個實例傳入構造,並調用gallery.getBackground()? –

+1

@Yan程卓:在這種情況下,他們沒有要求該畫廊的背景。他們正在爲圖庫中的項目定義背景。有一個區別。這就是說,我覺得這個特殊的樣本寫得不好。 – CommonsWare

相關問題