为什么我们需要使用Context.obtainStyledAttributes和declare-styleable来获取GUI组件的属性

时间:2011-02-25 01:30:42

标签: java android

我刚刚看到一些教程代码示例,它们在XML中使用declare-styleable,在Java代码中使用Context.obtainStyledAttributes

我的理解是,它试图获取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();

与在Swing中一样,这是我通常用来获取GUI组件的属性。这很有趣也很容易。我们可以在Android中使用类似的东西吗?

instaceOfAComponent.getBackground();

2 个答案:

答案 0 :(得分:5)

实际上,还有更多的东西。使用样式和获取属性的技术是允许自定义组件的使用者使用您为控件定义的XML属性的一种方法。例如,您可以创建具有字幕文本大小属性的TitleWithSubtitle控件。这种技术可以让你从布局XML中获取值。您仍然可以将getSubtitleTextSize()方法添加到控件本身,但这可以用于不同的目的。

答案 1 :(得分:0)

要获取View的背景,请致电getBackground()