Android XML中tools:context的真正目的是什么?

6

我正在学习安卓开发,并且想知道为什么在布局XML文件中找不到属性tools:context的真正目的。

我在这里阅读 https://developer.android.com/studio/write/tool-attributes.html#toolscontext 下的图片下方,其中提到在我们指定 tools:context 之前, onClick 不会对任何视图起作用。

我尝试过并且惊讶地发现,即使没有使用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 一切正常运作。

1个回答

9

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

该文档中没有任何内容支持这种说法。

没有使用tools:context时一切正常

正确。这是因为该文档中没有说明仅当使用了tools:context时才能使用onClick()。它确实说过,对于快速修复,您需要使用tools:context以便工具知道在哪里添加onClick()方法。

同时从stackoverflow上了解到它用于选择布局的合适主题

这也是不正确的。

Android XML中tools:context的真实目的是什么

它为开发工具提供上下文,告诉工具此布局将在何处使用,以便工具为开发人员提供更好的帮助,例如:

  • 考虑所在的活动和其主题,更准确地呈现预览
  • 更智能的助手,如上述的快速修复

tools:context是完全可选的。开发工具可以正常工作且无需它。这些工具可能会为您提供略微降级的帮助,但这是您的选择。

tools:contexttools命名空间中的任何属性在运行时都不会产生影响。我没有检查过,但我希望它们甚至在打包APK时被剥离,因为它们在运行时没有用处。


如果我在 onClick 中指定了方法,那么它会在所有包中搜索该方法以进行调用吗? - user6685522
1
@Nothing:不会,它会在加载布局的任何活动(直接或间接)中搜索。如果您需要比这更大的灵活性,请使用数据绑定框架 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接