如何在新的自定义视图中支持“ tools:text”?

时间:2018-07-25 10:36:59

标签: android android-studio android-custom-view

背景

开发人员可以通过多种方法为XML中的已知视图设置各种tools:属性,以便它们仅在编辑模式下(在IDE上)而不在运行时出现:

https://developer.android.com/studio/write/tool-attributes#tools_instead_of_android

因此,如果您有TextView,则可以设置tools:text="hello",并且仅在IDE中显示。

问题

虽然我使用此功能很长时间了,但我没有找到有关如何创建此类属性或让我自己的自定义视图支持它们(现有属性或新属性)的文档。

我尝试过的

我试图达到像普通属性那样的属性,但是我认为这是不可能的(或者我只是做错了)。

我很长时间以来一直知道,我可以使用View.isInEditMode来检查代码是否现在正在IDE上运行。但这只是一小步。

问题

  1. 鉴于我已经创建了一个自定义视图,如何使其支持现有的可能的tools:属性?例如,假设我没有从TextView扩展,但是我希望支持tools:text,该怎么做?

  2. 如何为自定义视图创建新的tools:属性?

1 个答案:

答案 0 :(得分:2)

如果要在自定义视图中使用现有的tools:属性,只需将这些属性添加到<declare-stleable>

<declare-styleable name="CustomView">
    <!-- This will allow you to use tools:text attribute as well -->
    <attr name="android:text"/>
</declare-styleable>

在您的自定义视图中,您可以像这样获得属性:

a.getText(R.styleable.CustomView_android_text)

现在您可以执行以下操作:

<com.myapplication.CustomView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="Lorem ipsum"/>

这将使您可以在自定义视图中使用标准的tools:属性。如果您想定义自己的设计时属性,请I've written a small library that allows you to do that