關於android layout佈局中的tools屬性
阿新 • • 發佈:2019-02-16
一、為何要使用tools
安卓開發中,在寫佈局程式碼的時候,AS可以看到佈局的預覽效果。以TextView為例
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="張三"/>
我們開發介面的時候,為了方便預覽效果,經常都會給TextView設定一個android:text,以便預覽效果,然後等開發除錯完畢後再刪除該text,然而實際情況是,我們開發完畢後往往忘了刪除,導致程式可能因為沒有設定text而顯示預設的text,從而導致顯示錯誤。比如
上面判斷當user不等於null時,才給TextView設定,如果user=null的話,則會顯示預設佈局中的”張三“,這樣就導致了顯示錯誤。TextView tv_username = (TextView) findViewById(R.id.tv_username); if(null!=user){ tv_username.setText(user.getUserName()); }
因此為了避免上述問題,我們可以使用tools名稱空間以及其屬性來解決
xmlns:tools="http://schemas.android.com/tools"
tools可以告訴Android Studio,哪些屬性在執行的時候是被忽略的,只在設計佈局的時候有效。比如我們要讓android:text屬性只在佈局預覽中有效可以這樣
tools可以覆蓋android的所有標準屬性,將android:換成tools:即可。<TextView android:id="@+id/tv_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" tools:text="張三" />
在執行的時候tools:本身是被忽略的,不會被帶進apk中,不用我們手動刪除。
二、tools支援的屬性
1、支援所有的android屬性,只需要將android:換成tools:即可2、壓制lint警告
- tools:ignore
表示忽略這個警告
比如忽略ImageView的contentDescription屬性,則新增tools:ignore="contentDescription",如果不知道具體屬性,可使用tools:ignore="all"壓制所有警告。
- tools:targetApi
指定該View顯示的目標api
假設你的應用支援minSdkLevel=15,而你使用了api21中的控制元件比如RippleDrawable,就可以使用tools:targetApi不顯示這個警告
3、其他非android標準屬性- tools:context
比如tools:context="com.support.tools.MainActivity"
- tools:menu
比如tools:menu="main,main2"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:menu="main,main2"
">
</LinearLayout>
需要注意,當主題為Theme.AppCompat時,這個屬性不起作用- tools:actionBarNavMode
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:actionBarNavMode="tabs"
">
</LinearLayout>
注意:該屬性只有holo主題才有效。- tools:listitem/listheader/listfooter
<ListView
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"
/>
- tools:layout
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.support.tools.MyFragment"
tools:layout="@layout/fragment"
/>
參考: