【问题标题】: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 的情况下也能正常工作 我还从 stackoverflow 中读到它用于为布局选择合适的主题。但不使用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_width="match_parent"
    android:layout_height="match_parent"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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,一切正常

【问题讨论】:

    标签: android xml


    【解决方案1】:

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

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

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

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

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

    这也是错误的。

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

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

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

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

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

    【讨论】:

    • 那么如果我在onClick 上指定方法,那么它会在所有要调用的包中搜索该方法吗?
    • @Nothing:不,它会在加载布局的任何活动中搜索它(直接或间接)。如果您需要更大的灵活性,请使用the data binding framework
    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2017-10-19
    • 2012-05-06
    相关资源
    最近更新 更多