Android “tools” namespace in layout xml documentat

2019-01-13 18:35发布

问题:

Per the question here,

What's "tools:context" in Android layout files?

The 'tools' namespace reference (xmlns:tools="http://schemas.android.com/tools") has begun to appear in my layouts recently, and I want to know more. The original post only described the 'tools:context' attribute, but I have also noticed usage of the "tools:listitem" attribute appearing when I have designated a preview layout item for a listview, i.e.

<ListView
    android:id="@+id/lvCustomer"
    tools:listitem="@layout/customer_list_item" >
</ListView>

Are there more elements?

What brought me to this 'tools' namespace is that I want to be able to have 'preview-only' text (i.e. in a TextView or EditText) when using the layout designer in eclipse.

Currently, I assign the 'text' or 'hint' property for previewing text when arranging my layouts... but then I always have to remember to clear the preview value from within the code.

Ideally, instead of

<string name="preview_customer_name">Billy Bob's Roadhouse Pub</string>

...

<TextView
    android:id="@+id/tvCustomerName"
    android:text="@string/preview_customer_name"
</TextView>

have a something like:

<TextView
    android:id="@+id/tvCustomerName"
    tools:previewText="@string/preview_customer_name"
</TextView>

Thanks-

回答1:

We've just added support for designtime attributes like this in Android Studio 0.2.11. See http://tools.android.com/tips/layout-designtime-attributes for more.



回答2:

You will find tool attribute when you set object in graphical layout.

Listview (in graphical mode) -> right Click -> Preview List Content -> Choose Layout...

produces:

tools:listitem="@layout/customer_list_item"


回答3:

Think of them as design time helpers only.They do not get processed in actual view rendering at run time.

For example you want to set background of some view in your layout design when working on android studio so that you can make clear distinction where that particular view is.So you would normally do that with

android:background="@color/<some-color>"

Now risk is that sometimes we forget to remove that color and it gets shipped in apk. instead you can do as follows:

tools:background="@color/<some-color>"

These changes will be local to android studio and will never get transferred to apk.

And also check out http://tools.android.com/tech-docs/tools-attributes for more options.



回答4:

Android Studio supports a variety of XML attributes in the tools namespace that enable design-time features (such as which layout to show in a fragment) or compile-time behaviors (such as which shrinking mode to apply to your XML resources)

Namespase is

xmlns:tools="http://schemas.android.com/tools"

Design-time view attributes - The following attributes define layout characteristics that are visible only in the Android Studio layout preview.

You are able to use tools: instead of android:

For example, if the android:text attribute value is set at runtime or you want to see the layout with a value different than the default, you can add tools:text to specify some text for the layout preview only.

The tools:text attribute sets "Google Voice" as the value for the layout preview

Read more

https://developer.android.com/studio/write/tool-attributes.html#design-time_view_attributes

https://gist.github.com/lopspower/b6f80881cb290de38c75

https://android.jlelse.eu/tools-attributes-hidden-gems-of-android-studio-d7451b194e0b