为什么我们需要使用Context.obtainStyledAttributes并声明,设置样式,以获得一个GUI组件的属性

Che*_*eng 4 java android

我刚刚看到一些教程代码示例,它们使用declare-styleableXML和Context.obtainStyledAttributesJava代码.

我的理解是,它试图获得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>
Run Code Online (Sandbox Code Playgroud)

有以下Java代码.

TypedArray a = context.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
        R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
Run Code Online (Sandbox Code Playgroud)

我们可以有简单的东西吗?

helloGalleryInstance.getBackground();
Run Code Online (Sandbox Code Playgroud)

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

instaceOfAComponent.getBackground();
Run Code Online (Sandbox Code Playgroud)

Mic*_*ine 5

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