工具的真正目的是啥:Android XML 中的上下文

Posted

技术标签:

【中文标题】工具的真正目的是啥:Android XML 中的上下文【英文标题】:What is the real purpose of tools:context in Android XML工具的真正目的是什么:Android XML 中的上下文 【发布时间】:2017-06-06 09:24:52 【问题描述】:

我正在学习android,想知道为什么我在布局XML文件中找不到属性tools:context的真正用途。

我在https://developer.android.com/studio/write/tool-attributes.html#toolscontext 的图片下看到onClick 在我们指定tools:context 之前将不适用于任何视图。

我试过了,想知道它在没有任何 tools:context 的情况下也能正常工作 我还从 *** 中读到它用于为布局选择合适的主题。但不使用tools:context 对我来说效果很好,那么这样做的真正目的是什么?

XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_
    android:layout_
    >

    <Button
        android:layout_
        android:layout_
        android:onClick="CallIt"
        />
</RelativeLayout>

主要活动:

package com.something.testingwith42;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    

    public void CallIt(View view)
        Toast.makeText(this, "Checking", Toast.LENGTH_LONG).show();
    

没有tools:context,一切正常

【问题讨论】:

【参考方案1】:

在我们指定 tools:context 之前,onClick 对任何视图都不起作用

该文档中没有任何内容提出该声明。

没有工具一切正常:上下文

正确。那是因为该文档中没有任何内容表明onClick() 仅在您拥有tools:context 时才有效。 确实说,对于快速修复,您需要 tools:context 让工具知道在哪里添加 onClick() 方法。

还从 *** 中读取它用于为布局选择合适的主题

这也是错误的。

工具的真正用途是什么:Android XML中的上下文

它为开发工具提供上下文,关于该布局将在哪里使用,以便工具可以为开发人员提供更好的帮助,例如:

更准确地呈现预览,将托管活动及其主题考虑在内 更智能的助手,例如前面提到的快速修复

tools:context 是完全可选的。没有它,开发工具可以并且确实可以工作。这些工具对您的帮助可能会有所下降,但这是您的选择。

tools:context — 或 tools 命名空间中的任何属性 — 对运行时没有影响。我没有检查,但我希望它们在打包 APK 时被剥离,因为它们在运行时没有用。

【讨论】:

那么如果我在onClick 上指定方法,那么它会在所有要调用的包中搜索该方法吗? @Nothing:不,它会在加载布局的任何活动中搜索它(直接或间接)。如果您需要更大的灵活性,请使用the data binding framework。

以上是关于工具的真正目的是啥:Android XML 中的上下文的主要内容,如果未能解决你的问题,请参考以下文章

c# 中“base”关键字的真正目的是啥?

XML中的“xmlns”是啥意思?

Android XML布局中的xmlns:tools是啥意思?

xml文档中的XMLNS URL是啥意思

套接字的真正定义是啥?

git-mv 的目的是啥?