Building Your First App

http://www.cnblogs.com/gcg0036/p/4321246.html

Building a Simple User Interface:

技术分享

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" > 

    <EditText
        android:id="@+id/edit_message"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="@string/edit_message" /> 

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" /> 

</LinearLayout>

关于一些属性的说明:

Android:id

这里定义的是View的唯一标示符,你可以在程序的代码里进行引用
+号只是当你第一次定义一个资源ID的时候需要。这里是告诉SDK此资源ID需要被创建出来。在应用程序被编译之后,SDK就可以直接使用ID值,edit_message是在项目gen/R.java文件中创建一个新的标示符,这个标示符就和EditText关联起来了。一旦资源ID被创建了,其他资源如果引用这个ID就不再需要+号了,。这里是唯一一个需要+号的属性

Android:layout_width 和android:layout_height

对于宽和高不建议指定具体的大小,使用"wrap_content"指定之后,这个视图只是占据内容大小的空间。如果你使用了"fill_parent",这时EditText将会布满整个屏幕,因为它将适应父布局的大小

Android:hint

当文本框为空的时候,会默认显示这个字符串。对于字符串"@string/edit_message"的值所引用的资源应该是定义在单独的文件里,而不是直接使用字符串。因为使用的是值是存在的资源,所以不需要使用+号。

这个按钮不需要指定android:id的属性,因为在Activity代码里不被引用到。

对于文本框来说如果能够沾满整个宽度会更好。LinearLayout使用权重的属性来达到这个目的,你可以使用android:layout_weight属性来设置。

你可以根据每一个部件所占的空间来指定圈中值的大小,它的总数是有同级别的部件来决定的。就类似于饮料的成分配方:“两份伏特加酒,一份咖啡利口酒”,意思就是这个酒中伏特加酒占三分之二。例如,你设置一个View的权重是2,另一个View的权重是1,那么总数就是3,这时第一个View占据 2/3的空间,第二个占据1/3的空间。如果你再加入第三个View,权重设为1,那么第一个View会占据1/2的空间,剩余的被另外两个View平分。

对于所有的View默认的权重是0,如果你只设置了一个View的权重大于0,那么这个View将占据除去别的View本身占据的空间的的所有剩余空间。因此这里设置EditText的权重为1,使其能够占据除了按钮之外的所有空间。

为了达到更有效的布局,在你设置权重的时候,你应该把EditText的宽度设置为0

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">DemoAndroid</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="edit_message">Enter a message</string>
    <string name="button_send">Send</string>

</resources>

注意: 该字符串资源与id使用了相同的名称(edit_message)。然而,对于资源的引用是区分类型的(比如id和字符串),因此,使用相同的名称不会引起冲突。

技术分享

 

Starting Another Activity:

Respond to the Send Button-响应Send(发送)按钮

<Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />
/** 当用户点击Send按钮时调用 */
  public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
  }

请注意,为了让系统能够将这个方法(你刚在MyFirstActivity中添加的sendMessage方法)与在android:onClick属性中提供的方法名字匹配,它们的名字必须一致,特别是,这个方法必须满足以下条件:

  • 公共的
  • 没有返回值
  • 有一个唯一的视图(View)参数(这个视图就是将被点击的视图)

在这个Intent构造函数中有两个参数:第一个参数是Context(上下文)(之所有可以用this是因为当前Activity(MyFirstActivity)是Context的子类) 系统需要传递Intent的应用组件的class对象(在这个案例中,这个activity应该被启动)

Intent 可以携带各种数据类型的集合来作为key-value附加对。 putExtra() 方法把键名作为第一个参数,把值作为第二个参数。

通常使用应用程序包名作为前缀来定义意图键是很好的做法。如果应用程序与其他应用程序进行交互就可以确保意图键唯一。

public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

启动一个Activity,你只需要调用startActivity()方法然后传入你的Intent(意图)系统接收到你的请求后会实例化在Intent中指定的Activity

技术分享

片段把应用程序的功能和用户界面分解成可以重新使用的模块

活动所有子类都必须实现 onCreate()方法。创建活动新实例时系统会调用该方式,此时必须用 setContentView()来定义活动布局,而且应对活动组件进行初始设置。

<activity
            android:name=".DisplayMessageActivity"
            android:label="@string/title_activity_display_message"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.amIurs.MainActivity" />
        </activity>

android:parentActivityName属性在应用程序逻辑层次结构中声明了活动的父类活动名称。

系统使用此值来实现默认导航操作,比如navigationon安卓4.1(API级别16)或者更高版本。

使用支持库并且如下所示添加 <meta-data>元素可以为安卓旧版本提供相同功能

Receive the Intent-获取Intent(意图)

每一个被Intent调用的Activity,不管用户将它导航到哪,你都可以在启动的Activity中通过getIntent()方法得到Intent以及Intent包含的数据

public class DisplayMessageActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 从intent中获取信息
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // 创建TextView对象
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    setContentView(textView);
    }

技术分享 技术分享

sdf

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。