First Part
In Android development, when writing layout code, the IDE can see the layout Preview.
However, some effects must be run before they can be seen, like this: TextView does not set any characters in the XML, but instead sets the text in the activity. So in order to preview the effect in the IDE, you must set the Android:text property for the TextView control in XML
1234567 |
<textview &NBSP;&NBSP; android:id= "@+id/text_main" android:layout_width= "Match_parent" &NBSP;&NBSP; android:layout_height= "wrap_content" &NBSP;&NBSP; android:textappearance= &NBSP;&NBSP; android:layout_margin= "@dimen/main_margin" &NBSP;&NBSP; android:text= "I am a title" /> |
In general, when we do this, we tell ourselves that it's okay, and then I'll delete all these things after I finish writing the code. But you may forget that there is such a code in your final product.
Use tools, don't do anything stupid.
The above situation can be avoided, and we use the tools namespace and its properties to solve this problem.
1 |
xmlns:tools= "http://schemas.android.com/tools" |
Tools can tell Android Studio which properties are ignored at run time and are only valid when designing the layout. For example, we want to make the Android:text property available only in the layout preview.
1234567 |
<textview &NBSP; android:id= "@+id/text_main " &NBSP; android:layout_width= "match_parent" &NBSP; android:layout_height= "wrap_content" &NBSP; android:textappearance= "@style/textappearance.title" &NBSP; android:layout_margin= "@dimen/main_margin" &NBSP; tools:text= "I am a title" /> |
Tools can override all of Android's standard properties, and Android: Switch to Tools: Yes. While running, even tools: itself is ignored and will not be brought into the APK.
Types of tools Properties
The tools attribute can be divided into two types: one that affects Lint hints, and one that is about XML layout design. The above introduction is the most basic use of tools: in the UI design to cover the standard Android properties, belong to the second type. The lint related properties are described below.
Lint properties related to
123 |
tools:ignore tools:targetApi tools:locale |
Tools:ignore
The Ignore property is to tell Lint to ignore some warnings in XML.
Suppose we have such a imageview
1234567 |
<imageview &NBSP;&NBSP; android:layout_width= " Wrap_ Content " &NBSP;&NBSP; android:layout_height= "wrap_content" &NBSP;&NBSP; android:layout_marginstart= "@dimen/margin_main" &NBSP;&NBSP; android:layout_margintop= "@dimen/margin_main" &NBSP;&NBSP; android:scaletype= "center" &NBSP;&NBSP; android:src= "@drawable/divider" /> |
Lint will indicate that the ImageView is missing the android:contentdescription attribute. We can use tools:ignore to ignore this warning:
12345678 |
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/margin_main"
android:layout_marginTop=
"@dimen/margin_main"
android:scaleType=
"center"
android:src=
"@drawable/divider"
tools:ignore=
"contentDescription"
/>
|
Tools:targetapi
Suppose minsdklevel, and you used the controls in api21 such as rippledrawable
12 |
<ripple xmlns:android= "http://schemas.android.com/apk/res/android" android:color= "@color/accent_color" /> |
The lint will prompt a warning.
In order not to display this warning, you can:
1234 |
<ripple xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:color= "@color/accent_color" tools:targetApi= "LOLLIPOP" /> |
Tools:locale (native language) properties
By default, the string in res/values/strings.xml performs a spelling check, and if it is not English, it prompts for spelling errors, and the following code tells studio that the local language is not English and there is no hint.
12345678 |
<resources
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
tools:locale=
"it"
>
<!-- Your strings go here -->
</resources>
|
This article first describes the most basic uses of tools-overrides the properties of Android, and then describes the properties that ignore lint hints. In the next article, we'll continue to cover other properties about UI previews (not Android standard properties).
PS: About ignoring the properties of lint, if you do not want to know, it does not matter, because does not affect the compilation, generally I do not control these warnings.
Part II
In this section we will continue to introduce other properties about UI previews (not standard Android properties).
Tools:context
The context property is actually called the activity property, and with this property, the IDE knows what theme to use when previewing the layout. He can also help find relevant files in the Java Code of Android Studio (Go torelatedfiles)
The value of this property is the full package name of the activity
123456789 |
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/container"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
tools:context=
"com.android.example.MainActivity"
> <!-- ... -->
</LinearLayout>
|
Tools:menu
Tells the IDE which menu to use in the preview window, which will be displayed on the root node of layout (Actionbar location).
In fact, the preview window is very smart, and if the layout is associated with an activity (referring to the Tools:context association above) it will automatically query the code in the relevant activity's Oncreateoptionsmenu method to display the menu. The Menu Property can override this default behavior.
You can also define multiple menu resources for the menu property , separated by commas between different menu resources.
1 |
tools:menu= "menu_main,menu_edit" |
If you do not want to display the menu in the preview chart:
Finally, it is important to note that this property does not work when the subject is Theme.appcompat .
Tools:actionbarnavmode
This property tells the display mode of the IDE app bar (actionbar in material), and its value can be
123456 |
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:orientation=
"vertical"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:actionBarNavMode=
"tabs"
/>
|
Similarly, when the subject is Theme.appcompat (r21+, at least) or theme.material, or uses the layout to include the toolbar method. This property also does not work, only the Holo theme is valid.
ListItem, Listheader, and Listfooter properties
As the name implies, add a preview layout of the head end and the child item in the preview effect such as ListView Expandablelistview.
1234567 |
<GridView android:id= "@+id/list" android:layout_width= "match_parent" android:layout_height= "wrap_content" tools:listheader= "@layout/list_header" tools:listitem= "@layout/list_item" tools:listfooter= "@layout/list_footer" /> |
Layout properties
Tools:layout tells Ide,fragment what to display when the program previews
123456789 |
<fragment xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/item_list"
android:name=
"com.example.fragmenttwopanel.ItemListFragment"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginLeft=
"16dp"
android:layout_marginRight=
"16dp"
tools:layout=
"@android:layout/list_content"
/>
|
Tools:showin
This property is set on the root element of a layout that is <include> by another layout. This allows you to point to one of the layouts that contains this layout, which is rendered at design time with the surrounding external layout. This will allow you to "view and edit this layout in context." Requires Studio 0.5.8 or later
An explanation of XML tools properties in Android (GO)