xmlns:tools 浅浅的花香味﹌ 2022-08-08 00:40 131阅读 0赞 *Don’t be a tool, use the tools.* 创建XML文件,IDE自动添加了 tools命名空间 xmlns:tools="http://schemas.android.com/tools" tools可以告诉IDE,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。 tools可以覆盖android的所有标准属性,将android:换成tools:即可,同时在运行的时候就连tools:本身都是被忽略的(不会编译到apk)。 栗子: <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" /> 不用再去使用android:text=“” 实时布局效果查看了,也不用再查看过效果后去删除了,使用tools:text预览效果,运行时不进入打包的apk \----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ## tools属性的种类 ## tools属性可以分为两种:一种是影响Lint提示的,一种是关于xml布局设计的。 以上介绍的是tools的最基本用法:在UI设计的时候覆盖标准的android属性,属于第二种。 下面介绍Lint相关的属性。 ## Lint相关的属性 ## tools:ignore tools:targetApi tools:locale tools:ignore ### tools:ignore ### 告诉Lint忽略xml中的某些警告。 假设我们有这样的一个ImageView <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:src="@android:drawable/ic_delete" / Lint会提示该ImageView缺少 android:contentDescription属性。我们可以使用 tools:ignore来忽略这个警告: <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:src="@android:drawable/ic_delete" tools:ignore="contentDescription" /> ### tools:targetApi ### 假设minSdkLevel 15,而你使用了api21中的控件比如RippleDrawable <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/accent\_color" /> 则Lint会提示警告。 为了不显示这个警告,可以: <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(本地语言) ### 默认情况下res/values/strings.xml中的字符串会执行拼写检查,如果不是英语,会提示拼写错误,通过以下代码来告诉studio本地语言不是英语,就不会有提示了。 <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> ps:关于忽略Lint的属性,如果不想了解的话也没关系,因为并不影响编译,一般我都不会管这些警告。 ## UI相关属性 ## tools:context tools:menu tools:actionBarNavMode tools:listitem/listheader/listfooter tools:showIn tools:layout ### tools:context ### context属性制定xml布局对应的Activity,IDE就知道在预览布局的时候该采用什么样的主题。 It can also help the **Go to Related files** intention in Android Studio, even though it has become pretty clever at figuring stuff out by itself. ![1_Rp4mBax1Q4pV1PuuZYPRvw.png][] <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 ### 告诉IDE 在预览窗口中使用哪个菜单,这个菜单将显示在layout的根节点上(actionbar的位置)。 ![1425918468454802.png][] 其实预览窗口非常智能,如果布局和一个activity关联(指上面所讲的用tools:context关联)它将会自动查询相关activity的onCreateOptionsMenu方法中的代码,以显示菜单。而menu属性则可以覆盖这种默认的行为。 你还可以为menu属性定义多个菜单资源,不同的菜单资源之间用逗号隔开。tools:menu="menu\_main,menu\_edit" 如果你不希望在预览图中显示菜单则:tools:menu="" 最后需要注意,当主题为Theme.AppCompat时,这个属性不起作用。 ### tools:actionBarNavMode ### 这个属性告诉IDE app bar(Material中对actionbar的称呼)的显示模式,其值可以是standard,tabs,list <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" /> 同样的,当主题是Theme.AppCompat (r21+, at least) 或者Theme.Material,或者使用了布局包含Toolbar的方式。 该属性也不起作用,只有holo主题才有效。 ### tools:listitem, listheader 和listfooter ### 就是在ListView ExpandableListView等的预览效果中添加头部 尾部 以及子item的预览布局。 但是注意:**header 和 footer不能设置给GridView ,只有listitem可以被设置** ![20150425121914629][] ![1_3k2qGwN19tZFjUO_pzaSw.jpeg][] ### tools:layout ### tools:layout告诉ide,Fragment在程序预览的时候该显示成什么样 ![1_f5uMzpfa227Fr1RhNcunEw.png][] ### tools:showIn ### But if you go and **edit that included layout**, you won’t have a context for it, **it’ll just show up as if it were the root layout** of an activity. With the **showIn** attribute **you can tell the preview pane to show you the include into the context** in which it will then be inflated. This is **especially useful if your included layout has a merge tag** as its root (which is treated as a FrameLayout by the preview pane). <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:showIn="@layout/activity_main"> ![1_9QdrcTjxpJO15RVmUmL5Iw.png][] *Don’t be a tool, use the tools.* 参考: [https://medium.com/sebs-top-tips/tools-of-the-trade-part-1-f3c1c73de898][https_medium.com_sebs-top-tips_tools-of-the-trade-part-1-f3c1c73de898] [https://medium.com/sebs-top-tips/tools-of-the-trade-part-2-b91271892d10][https_medium.com_sebs-top-tips_tools-of-the-trade-part-2-b91271892d10] [1_Rp4mBax1Q4pV1PuuZYPRvw.png]: https://d262ilb51hltx0.cloudfront.net/max/600/1*Rp4mBax1Q4pV1PuuZYPRvw.png [1425918468454802.png]: /images/20220805/1e92da7d51864e038bf410690987af07.png [20150425121914629]: /images/20220805/2ce4dd7cba534bddbce3433e9cda385a.png [1_3k2qGwN19tZFjUO_pzaSw.jpeg]: https://d262ilb51hltx0.cloudfront.net/max/913/1*_3k2qGwN19tZFjUO_pzaSw.jpeg [1_f5uMzpfa227Fr1RhNcunEw.png]: https://d262ilb51hltx0.cloudfront.net/max/1400/1*f5uMzpfa227Fr1RhNcunEw.png [1_9QdrcTjxpJO15RVmUmL5Iw.png]: https://d262ilb51hltx0.cloudfront.net/max/757/1*9QdrcTjxpJO15RVmUmL5Iw.png [https_medium.com_sebs-top-tips_tools-of-the-trade-part-1-f3c1c73de898]: https://medium.com/sebs-top-tips/tools-of-the-trade-part-1-f3c1c73de898 [https_medium.com_sebs-top-tips_tools-of-the-trade-part-2-b91271892d10]: https://medium.com/sebs-top-tips/tools-of-the-trade-part-2-b91271892d10
还没有评论,来说两句吧...