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





5.00/5 (5投票s)
如何创建 Android Activity 及其相关的 Layout 文件,然后从另一个 Activity 调用 (intent) 它们
在 Droidio 中创建 Android Activity
在 Android Studio 中打开你的项目,右键单击
你将会看到 "新建空 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 移开,并占据屏幕中心
