tools命名空间是什么?

    xmlns:tools="http://schemas.android.com/tools"

tools命名空间是用于在开发阶段,在IDE中预览xml界面用的,实际运行的时候,会被忽略。

layout

tools:layout仅仅是告诉编辑器,Fragment在程序预览时的布局。

Context

一般在根布局文件中会出现 tools:context = 某个activity名称。
举例:tools:context=“.activity.ScenarioActivity”
由于布局文件,可以给不同的Activity使用,不同的Activity可以设置不同的theme,所以在预览时是无法得知布局的theme的,必须指定一个Activity才行,然后布局文件,就会使用该Activity的theme来展示。

app 命名空间

假设现在有两个版本的 ShareActionProvider 的定义,一个是在Android framework下,另外一个在Android v7 support library 中。
你想要支持的最新SDK的版本为10。 然而ShareActionProvider 仅仅在Andriod Framework 大于等于 14的版本中才有。那怎样支持版本10-13呢?这时候就需要使用Android support library了。

修改 build.gradle文件,导入support library:

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:21.0.2'
}

如果你的项目,使用了在framework旧版本不支持的属性(比如actionProviderClass 和showAsAction)。这时候你就需要support library 中自定义的属性,为了使用这些自定义的属性,你需要使用app 命名空间。 名为android的命名空间的是当前SDK 版本的Android Framework的属性(这里使用的Android Framework 的版本号为14)。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_share"
        android:title="@string/action_share"
        app:showAsAction="always"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />
</menu>
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" 
        app:theme="@style/ToolbarTheme"
        app:title="@string/activity_scenario_title"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

?attr/colorPrimary 最前面的?表示根据用户选择的主题(黑暗模式),来切换属性值。
colorPrimary 的定义在styles.xml中。

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
    </style>
</resources>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐