首页 > 其他分享 >Android开发 - xmlns命名空间中tools详解

Android开发 - xmlns命名空间中tools详解

时间:2024-07-20 18:18:14浏览次数:16  
标签:xmlns 预览 menu 布局 Lint Android tools 属性

xmlns:tools 是什么

  • 命名空间 tools可以告诉Android Studio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。比如我们要让android:text属性只在布局预览中有效。tools可以覆盖android的所有标准属性,将android:换成tools:即可。同时在运行的时候就连tools:本身都是被忽略的,不会被带进apk中,tools属性在影响Lint提示作用稍大

关于影响Lint提示详解

  • Lint相关的属性

    tools:ignore
    tools:targetApi
    tools:locale
    
  • tools:ignore:ignore属性是告诉Lint忽略xml中的某些警告

    • 假设我们有这样的一个ImageView

      <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" />
      

      Lint会提示该ImageView缺少android:contentDescription属性,我们可以使用tools:ignore来忽略这个警告:

      <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:假设minSdkLevel 15,而你使用了api21中的控件比如RippleDrawableLint会提示警告

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

      为了不显示这个警告,可以

      <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>
    

tools关于UI预览属性详解

tools的属性

  • tools:context
    
    tools:menu
    
    tools:actionBarNavMode
    
    tools:listitem/listheader/listfooter
    
    tools:showIn
    
    tools:layout
    

tools:context属性

  • context属性其实正是的称呼是activity属性,有了这个属性,ide就知道在预览布局的时候该采用什么样的主题。同时他还可以在android studiojava代码中帮助找到相关的文件(Go to Related files

  • 该属性的值是activity的完整包名

    <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的位置

  • 其实预览窗口非常智能,如果布局和一个activity关联(指上面所讲的用tools:context关联)它将会自动查询相关activityonCreateOptionsMenu方法中的代码,以显示菜单。而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:listitemtools:listheadertools:listfooter属性

  • 顾名思义就是在ListView ExpandableListView等的预览效果中添加头部、尾部以及子item的预览布局

    <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" />
    

tools:layout属性

  • tools:layout告诉ideFragment在程序预览的时候该显示成什么样

    <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属性

  • 该属性设置于一个被其他布局的布局的根元素上。这让您可以指向包含此布局的其中一个布局,在设计时这个被包含的布局会带着周围的外部布局被渲染。这将允许您“在上下文中”查看和编辑这个布局。需要 Studio 0.5.8 或更高版本

标签:xmlns,预览,menu,布局,Lint,Android,tools,属性
From: https://www.cnblogs.com/ajunjava/p/18313553

相关文章

  • Android开发 - 布局文件之 include 使用
    简介include是在一个布局中,导入另一个布局文件。优势是:相同的页面只需写一次,提高了共通布局的复用性。下面我们以标题栏为例,详细说明它的使用步骤使用步骤第一步:通用布局-创建title_bar.xml//title_bar<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:an......
  • Android开发 - Context解析
    Context是什么Context的中文翻译为:语境;上下文;背景;环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指......
  • android audio不同音频流,(三)各音频流默认音量加载过程
    各音频流默认值,定义文件路径:frameworks/base/media/java/android/media/AudioSystem.java默认音量定义数组: /**@hide*/ publicstaticint[]DEFAULT_STREAM_VOLUME=newint[]{     4, //STREAM_VOICE_CALL     7, //STREAM_SYSTEM ......
  • 简化Android数据管理:深入探索SQLite数据库
    SQLite数据库在Android中的使用SQLite是一种精巧的、轻量级的、无服务器的、零配置的、事务性SQL数据库引擎。相较于其他数据库系统,SQLite更适用于需要轻量级解决方案的移动应用场景。本文将详细介绍SQLite数据库在Android中的使用,包括数据库的创建、表的建立、数据的增删......
  • Android开发 - inflate方法与创建视图解析
    简介在Android开发过程中,很多地方都不可避免的使用到inflate方法,如在给Fragment进行CreateView(创建视图)时,我们通常是inflater.inflate(R.layout.xxx,container,false)来调用inflate方法的,不难发现,inflate方法的作用是将一个xml布局文件变成一个view对象。注意事项......
  • Android笔试面试题AI答之Activity(2)
    答案仅供参考,大部分为文心一言AI作答目录1.请介绍一下Activity生命周期?1.完全生命周期2.可见生命周期3.前台生命周期4.配置更改5.特殊场景2.请介绍一下横竖屏切换时Activity的生命周期变化?1.默认行为(未设置`android:configChanges`)2.设置`android:configChang......
  • Android 14 适配之 - 隐式/显示 Intent 和 广播适配
    隐式Intent对隐式Intent限制:对Android14(API级别34)或更高版本为目标平台的应用,Android会限制应用向内部应用组件发送隐式intent:1.即隐式intent只能发送给导出的组件。在应用必须使用显式intent来发送组件,且被发送的组件是未被导出的属性配置。2.如果被发出的......
  • 从零开始部署yolov8到安卓手机详细教程 ——使用YOLOV8大模型开发的物体检测Android手
    1.使用了yolov8大模型来进行物体检测android手机APP⒉.使用了coco数据集进行训练,app可以检测出“人类"∵"自行车"."汽车"∵"摩托车"."飞机","公共汽车"∵"火车","卡车"∵."船","红绿灯","消防栓","停车标志"∵,"停车收费表&......
  • 解决Could not find artifact jdk.tools:jdk.tools:jar:1.8 at specified
    报错详细信息Failedtoexecutegoalorg.apache.maven.plugins:maven-dependency-plugin:3.1.1:tree(default-cli)onprojectspringbootbd-product:Cannotbuildprojectdependencygraph:Couldnotresolvenorcollectfollowingdependencies:[jdk.tools:jdk.tools:ja......
  • Android自动化 - 环境准备
    ADB简介什么是ADBADB全称为AndroidDebugBridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是Android设备。ADB也是AndroidSDK中的一个工具,可以直接操作管理Android模拟器或者真实的Android设备。为什么要用ADB运行设备的......