0


我正在阅读一个 android 指南,我已经到了一个解释标签的地方,它说打字 <action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER">

我把我的活动作为主要活动。我的问题如下:是否可以在我的源代码中做同样的事情,就像在 java 中输入一些东西 (public void main(...)) 一样,我的编译器理解这是我的主要活动?第二个问题很笼统,是否可以仅使用我的源文件在 xml 中完成所有操作?

4

2 回答 2

1

意图过滤器

系统使用意图过滤器来尝试查找已安装的应用程序组件,这些组件可以接收系统试图解析的意图,即当意图没有指定特定的组件类作为目标时。例如,如果您这样做...

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);

系统没有明确指示要启动哪个 Activity(或 Service,或 BroadcastReceiver)。它必须找到一些能够解析 Intent 的组件,并使用声明<intent-filter>的 s 来执行此操作。通常,能够捕获图像的应用程序(如相机应用程序)将声明其活动处理此操作。

当您单击应用程序的启动器图标时,启动器基本上会创建一个这样的 Intent:

Intent mainIntent = new Intent(Intent.ACTION_MAIN);
mainIntent.setCategory(Intent.CATEGORY_LAUNCHER);
mainIntent.setPackage(/* your package */);
startActivity(mainIntent);

结果是系统试图在该包中找到一个组件,<intent-filter>其中指定了<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER">

public static void main()简而言之,它与Java中典型的存在完全无关。

XML

当系统在运行时加载一个 XML 文件(如布局文件)时,它实际上会根据通过解析文件找到的信息来创建 Java 对象。以布局为例,所有不同的 XML 标签(例如<ImageView>)都有对应的 java 类(android.widget.ImageView),并且您可以使用 XML 属性设置的大多数属性也可以使用这些视图上的公共方法进行设置。

如果您愿意,您可以通过自己实例化它们并使用set[Property]()方法来完全用 Java 构建 Activity 的布局,这实际上是系统为您做的事情:

public void onCreate(Bundle saved) {
    super.onCreate(saved);

    LinearLayout layout = new LinearLayout(this);
    layout.setPadding(20, 20, 20, 20);
    layout.setOrientation(LinearLayout.VERTICAL);

    TextView text = new TextView(this);
    text.setTextSize(18);
    text.setTextColor(Color.MAGENTA);
    text.setText(R.string.hello_world);

    layout.addView(text, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    setContentView(layout);
}

XML drawables 也会发生类似的事情,尽管在 Java 中创建它们有很大不同。

简而言之,您可以在 XML 中执行的许多操作也可以在 Java 中执行,但它也有缺点(例如,您失去了操作系统提供的自动资源处理)。

于 2013-06-08T04:35:48.687 回答
0

1、没有

2、Android.manitest 文件是一个描述文件,它告诉系统你的应用程序有什么属性。这是Java代码无法替代的。

3、有些资源文件可以用你的java代码替换,但是我觉得用java代码替换xml文件不是一个好主意。它是用 MVC 设计的

于 2013-06-08T01:16:08.627 回答