65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Droidio (Android Studio) 中创建和调用 Activity

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2014年5月9日

CPOL

3分钟阅读

viewsIcon

18946

如何创建 Android Activity 及其相关的 Layout 文件,然后从另一个 Activity 调用 (intent) 它们

在 Droidio 中创建 Android Activity

Android Studio 中打开你的项目,右键单击\app\src\main\java\<bla>.app 并选择 新建 > Activity > 空 Activity。

你将会看到 "新建空 Activity" 对话框。 给 Activity 取一个名字,例如 "DeliveryItemActivity"。

当你这样做时,下面的布局名称属性会自动填充一个相应的名称,例如,在这种情况下,"activity_delivery_item"(此布局文件将具有一个 .xml 扩展名)。

你的对话框现在看起来像这样

现在点击 "完成" 按钮。

这将在 <appname>\app\src\main\java\res\layout 文件夹中打开布局文件,其中包含一个默认布局和一个 widget:一个 TextView,其中包含非常典型的 "Hello world!" 文字

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="hhs.app.DeliveryItemActivity">

    <TextView
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

为了防止即将到来的精神崩溃,通过打开 \app\src\main\java\res\values\strings.xml 文件并替换该文字来将其更改为更有趣的内容

<string name="hello_world">Hello world!</string>

...改为

<string name="hello_world">You say Hello I say Goodbye Mr. Chips Ahoy Matey!</string>

注意: 如果你以这种方式更改预定义的 "hello_world" 字符串,则所有后续的 Layout 文件都将使用你的文字(而不是无聊但安全的默认 "Hello World")。

现在,在 <appName>\app\src\main\java\<appname>\app\DeliveryItemActivity 中打开你创建的 Activity。 你将看到基本的默认 Activity 代码

package hhs.app;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class DeliveryItemActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_delivery_item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.delivery_item, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

你会注意到构造函数包含以下行

        setContentView(R.layout.activity_delivery_item);

所以,这个控制器(Activity)已将其视图(Layout 文件)设置为预期的视图 - 我们刚刚调整过的视图。 你可以很容易地在这里将其设置为其他视图

        setContentView(R.layout.why_do_fools_fall_out_of_love);

当然,要使其有意义(并且可以工作),你必须创建一个名为 "why_do_fools_fall_out_of_love.xml" 的布局 (xml) 文件

事实上,这就是 MVC(模型/视图/控制器)范例的美妙之处 - 你可以根据用户(基于他们需要的功能或他们有权访问的功能,例如)、你的应用程序运行的设备、设备的状态(例如它当前是否具有 Internet 连接或其他情况)、天文现象(只是开玩笑,但你明白了)等为特定控制器交换视图。

从另一个 Activity 实例化 Activity/Layout

现在我们有了一个 Activity/Layout 对,我们想从另一个 Activity 调用/实例化它们。

要做到这一点,你可以响应一个事件,比如点击或点击一个按钮。 为了演示这一点,将一个按钮拖放到你的主 Activity(或任何其他 Activity)上。

转到 Activity 的布局文件(例如 activity_main.xml)并打开它。 确保你处于设计模式(而不是 "Text" 模式)(如果需要,在 Droidio 中段的 SE 角切换到设计选项卡)。 从 Palette > Widgets,拖动一个按钮。 为了给它一个合理的名称,现在进入 "Text" 模式; 找到描述你刚刚添加的按钮的 XML。 它看起来像这样

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bla"
        android:id="@+id/button2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignRight="@+id/listViewXactionList"
        android:layout_alignEnd="@+id/listViewXactionList" />

更改 "text" 和 "id" 属性,以便为你的按钮提供非通用标题和名称,例如

android:text="Delivery Item"
android:id="@+id/buttonDeliveryItem"

现在打开 MainActivity,并在之前显示的 "setContentView()" 调用下添加如下代码

        Button button = (Button) findViewById(R.id.buttonDeliveryItem);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent delItemIntent = new Intent(MainActivity.this, DeliveryItemActivity.class);
                MainActivity.this.startActivity(delItemIntent);
            }
        });

...瞧! 运行该应用程序,点击该按钮,你创建的 Activity 会将先前的 Activity 移开,并占据屏幕中心

© . All rights reserved.