1. 程式人生 > >淺談Android XML中的tools屬性

淺談Android XML中的tools屬性

簡介

tools相當於xml中的輔助功能,舉個例子,你include一個xml,本xml是看不到介面顯示的,加了tools:showlayoutin=""就可以顯示了,還有scrollview正常我們也是在預覽介面中看不到全部內容的,加上tools就能看到全貌了,是一個輔助工具。

下面請看詳細分析!

第一部分

安卓開發中,在寫佈局程式碼的時候,ide可以看到佈局的預覽效果。

但是有些效果則必須在執行之後才能看見,比如這種情況:TextView在xml中沒有設定任何字元,而是在activity中設定了text。因此為了在ide中預覽效果,你必須在xml中為TextView控制元件設定android:text屬性

<span style="font-size:14px;">    <TextView
      android:id="@+id/text_main"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:textAppearance="@style/TextAppearance.Title"
      android:layout_margin="@dimen/main_margin"
      android:text="I am a title" /></span>

一般我們在這樣做的時候都告訴自己,沒關係,等寫完程式碼我就把這些東西一併刪了。但是你可能會忘,以至於在你的最終產品中也會有這樣的程式碼。

用tools吧,別做傻事

以上的情況是可以避免的,我們使用tools名稱空間以及其屬性來解決這個問題。

<span style="font-size:14px;">    xmlns:tools="http://schemas.android.com/tools"</span>

tools可以告訴Android Studio,哪些屬性在執行的時候是被忽略的,只在設計佈局的時候有效。比如我們要讓android:text屬性只在佈局預覽中有效可以這樣

<span style="font-size:14px;">    <TextView
     android:id="@+id/text_main"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:textAppearance="@style/TextAppearance.Title"
     android:layout_margin="@dimen/main_margin"
     tools:text="I am a title" /></span>

tools可以覆蓋android的所有標準屬性,將android:換成tools:即可。同時在執行的時候就連tools:本身都是被忽略的,不會被帶進apk中。

tools屬性的種類

tools屬性可以分為兩種:一種是影響Lint提示的,一種是關於xml佈局設計的。以上介紹的是tools的最基本用法:在UI設計的時候覆蓋標準的android屬性,屬於第二種。下面介紹Lint相關的屬性。

Lint相關的屬性

    tools:ignore
    tools:targetApi
    tools:locale

tools:ignore

ignore屬性是告訴Lint忽略xml中的某些警告。

假設我們有這樣的一個ImageView

<span style="font-size:14px;">    <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" /></span>

Lint會提示該ImageView缺少android:contentDescription屬性。我們可以使用tools:ignore來忽略這個警告:

<span style="font-size:14px;">    <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" /></span>

tools:targetApi

假設minSdkLevel 15,而你使用了api21中的控制元件比如RippleDrawable

    <ripple xmlns:android="http://schemas.android.com/apk/res/android"
      android:color="@color/accent_color" />

則Lint會提示警告。

為了不顯示這個警告,可以:

<span style="font-size:14px;"><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" /</span>

tools:locale(本地語言)屬性

預設情況下res/values/strings.xml中的字串會執行拼寫檢查,如果不是英語,會提示拼寫錯誤,通過以下程式碼來告訴studio本地語言不是英語,就不會有提示了。

<span style="font-size:14px;">    <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></span>

這篇文章首先介紹了tools的最基本用法-覆蓋android的屬性,然後介紹了忽略Lint提示的屬性。下篇文章中,我們將繼續介紹關於UI預覽的其他屬性(非android標準屬性)。

ps:關於忽略Lint的屬性,如果不想了解的話也沒關係,因為並不影響編譯,一般我都不會管這些警告。

第二部分

這部分我們將繼續介紹關於UI預覽的其他屬性(非android標準屬性)。

  • tools:context

  • tools:menu

  • tools:actionBarNavMode

  • tools:listitem/listheader/listfooter

  • tools:showIn

  • tools:layout


tools:context

context屬性其實正是的稱呼是activity屬性,有了這個屬性,ide就知道在預覽佈局的時候該採用什麼樣的主題。同時他還可以在android studio的java程式碼中幫助找到相關的檔案(Go to Related files

該屬性的值是activity的完整包名

<span style="font-size:14px;">    <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></span>


tools:menu

告訴IDE 在預覽視窗中使用哪個選單,這個選單將顯示在layout的根節點上(actionbar的位置)。

其實預覽視窗非常智慧,如果佈局和一個activity關聯(指上面所講的用tools:context關聯)它將會自動查詢相關activity的onCreateOptionsMenu方法中的程式碼,以顯示選單。而menu屬性則可以覆蓋這種預設的行為。

你還可以為menu屬性定義多個選單資源,不同的選單資源之間用逗號隔開

<span style="font-size:14px;">  tools:menu="menu_main,menu_edit"</span>

如果你不希望在預覽圖中顯示選單則:

<span style="font-size:14px;">    tools:menu=""</span>

最後需要注意,當主題為Theme.AppCompat時,這個屬性不起作用。

tools:actionBarNavMode

這個屬性告訴ide  app bar(Material中對actionbar的稱呼)的顯示模式,其值可以是

  • standard

  • tabs

  • list

<span style="font-size:14px;">    <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" /></span>

同樣的,當主題是Theme.AppCompat (r21+, at least) 或者Theme.Material,或者使用了佈局包含Toolbar的方式。  該屬性也不起作用,只有holo主題才有效。

listitem, listheader 和listfooter 屬性

顧名思義就是在ListView ExpandableListView等的預覽效果中新增頭部 尾部 以及子item的預覽佈局。

<span style="font-size:14px;">    <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" /></span>

layout屬性

tools:layout告訴ide,Fragment在程式預覽的時候該顯示成什麼樣

<span style="font-size:14px;">    <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" /></span>

tools:showIn

該屬性設置於一個被其他佈局<include>的佈局的根元素上。這讓您可以指向包含此佈局的其中一個佈局,在設計時這個被包含的佈局會帶著周圍的外部佈局被渲染。這將允許您“在上下文中”檢視和編輯這個佈局。需要 Studio 0.5.8 或更高版本。

關於tools 就介紹完了。

相關推薦

Android XMLtools屬性

簡介 tools相當於xml中的輔助功能,舉個例子,你include一個xml,本xml是看不到介面顯示的,加了tools:showlayoutin=""就可以顯示了,還有scrollview正常我們

Android開發的MVVM模式及與MVP和MVC的區別

三種架構模式的演化: 什麼是MVVM? MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音訊、視訊、3D、動畫……,這導致了軟體UI層更加細節化、可定製化。同時,在技術層面,WPF也帶來

RPG遊戲屬性系統設定

先來張我最喜歡的Nero和Dante的帥照!!!最近的E3展也是讓廣大遊戲愛好者們開啟眼界,小編最喜歡的鬼泣系列也將於明年春季迎來鬼泣4的正統續作鬼泣5,再加上最近小編也在自己開發著RPG遊戲,所以今天小編想和大家一起來談一談在RPG遊戲中的屬性系統的設定。首先先解釋一下什麼

Android開發需要注意的安全問題

什麼是安全問題?       從黑客的角度定義,只要黑客能夠從app中找到一些方法獲取我們的原始碼根據某些明顯的欄位得到重要資訊從而修改程式以達到一定目的;竊取使用者資訊;竊取本地重要資訊間接可以

android開發的MVP模式

看到MVP,大家肯定會想什麼是MVP呢?這個我可以肯定的告訴大家MVP(Most Valuable Player)是最有價值球員的意思,這當然是開玩笑了。之所以會出現MVP這種架構模式,是因為我相信大家在開發App時,肯定會發現,Activity的負擔非常重

Android的組播(多播)

-1 ip協議 strong 多個 接受 端口 ui線程 nbsp 數據 組播使用UDP對一定範圍內的地址發送相同的一組Packet,即一次可以向多個接受者發出信息,其與單播的主要區別是地址的形式。IP協議分配了一定範圍的地址空間給多播(多播只能使用這個範圍內

Android開發實戰(二十一):android:clipChildren屬性

.cn viewpage port 部分 lap ole 有一個 默認 版本 原文:Android開發實戰(二十一):淺談android:clipChildren屬性實現功能: 1、APP主界面底部模塊欄 2、ViewPager一屏多個界面顯示 3、........

Android幸運快三平臺出租的meta-data及其應用

key 引用 平臺 name 如何 Coding pri sch xxxxx 在日常幸運快三平臺出租 haozbbs.com Q1446595067 的Android開發中,AndroidManifest中總會出現一些標簽,或是第三方SDK配置信息,或是系統配置,不禁讓人

Android屬性動畫.

1、前言 在我們體驗一款APP時,炫酷的動畫往往能讓使用者體驗大幅度提升。想當年我剛學Android的時候,無意中看到蘑菇街購物車的動畫效果,把我給激動得,非要在自己的APP中加入那動畫,記得當時用費了好大的勁...不提了,說多了都是淚... 先了解下,目前可以實現動畫的方

AndroidAndroid的MVP

個人開發的微信小程式,目前功能是書籍推薦,後續會完善一些新功能,希望大家多多支援! 前言 為什麼使用MVP,網上有很多說法,最主要就是減輕了Activity的責任,相比於MVC中的Activity承擔的責任太多,因此有必要講講MVP。 MVP入門 在MVC框

Android的 Fragment、生命週期回撥方法 以及使用

        4onActivityCreated()              當Activity中的onCreate方法執行完後呼叫。 注意了:從這句官方的話可以看出:當執行onActivityCreated()的時候 activity的onCreate才剛完成。所以在onActivityCrea

Android的Handler機制

Handler是Android中提供的一種非同步回撥機制,也可以理解為執行緒間的訊息機制。為了避免ANR,我們通常會把一些耗時操作(比如:網路請求、I/O操作、複雜計算等)放到子執行緒中去執行,而當子執行緒需要修改UI時則子執行緒需要通知主執行緒去完成修改UI的

AndroidSerializable和Parcelable使用區別

Android中序列化有兩種方式:Serializable以及Parcelable。其中Serializable是Java自帶的,而Parcelable是安卓專有的。 一、Serializable序列化 serializable使用比較簡單,只需要對某個類實現Serializable 介面即可。 Ser

android手機聯絡人字母索引表的實現

實際上字母索引表的效果,可以說在現在的眾多APP中使用的非常流行,比如支付寶,微信中的聯絡人,還有購物,買票的APP中選擇全國城市,切換城市的時候,這時候的城市也就是按照一個字母索引的順序來顯示,看起來是很方便的.其實這種字母索引表的效果最開始是出現在微信的聯絡人中.因為覺

AndroidCallback(回撥)的使用

今天專案的Bug基本修改完成了,於是就對自己還未了解的回撥函式進行了學習。回撥其實就是在一定的時間裡做“一件事”,至於“這件事”具體做的是什麼不會管,只管做“這件事“,比如Boss叫員工去吃飯,但每個員工可能吃不同的食物。只不過,回撥是對介面而言。簡單來說就是,A物件呼叫

android載入高清大圖及圖片壓縮方式(二)

  這一講就是本系列的第二篇,一起來聊下關於android中載入高清大圖的問題,我們都知道如果我們直接載入原圖的話,一個是非常慢,需要等待一定時間,如果沒有在一定的時間內給使用者響應的話,將會極大影響使用者的體驗。另一個是如果你的手機記憶體小的話,可能會直接崩潰。這也就是直

Android的LOG檢視ANR(一)

轉自:http://yinger-fei.iteye.com/blog/1533788 手機中pull處理trace.txt 進去 data/anr 再pull 一:什麼是ANR                   ANR:Application Not Resp

android圖片處理之圖形變換特效Matrix(四)

今天,我們就來談下android中圖片的變形的特效,在上講部落格中我們談到android中圖片中的色彩特效來實現的。改變它的顏色主要通過ColorMatrix類來實現。 現在今天所講的圖片變形的特效主要就是通過Matrix類來實現,我們通過上篇部落格知道,改變色彩特效,主要

Android的MVVM模式

大家好啊,我是kele。眾所周知,Android的設計模式主要有三個:MVC,MVP,MVVM。今天主要來談一下MVVM模式,簡單說明它的好處以及它和MVP在實現方面的區別。 DataBinding android { ....