实例6 用坐标精确布局

在本小节中,通过AbsoluteLayout绝对布局的应用,构建了一个软件登录界面,并通过本程序的实现,来向读者介绍AbsoluteLayout绝对布局的具体应用。

【实例描述】

本节中,构造了一个软件登录界面,在该界面中,可以输入姓名和密码,单击“确定”按钮,可以将所输入的姓名和密码显示到填写界面下方的文本编辑框中。单击“取消”按钮,则会清空所“填写”的姓名和密码。

本实例的运行效果图,如图2-6所示。

图2-6 软件登录界面截图

提示:在图2-6中,实现了简单地输入数据并存储数据的功能。

【实现过程】

本程序的开发主要运用了AbsoluteLayout绝对布局的相关知识。所谓绝对布局是指由开发人员通过给出控件的坐标来在容器摆放控件,容器就不再负责这个工作了。

在该界面开发中,用到了TextView文本框控件,单行EditText控件、Button按钮控件、ScrollView滚动控件和多行EditText控件。

【代码解析】

首先为读者介绍本程序主界面main.xml的开发,代码如下。

代码位置:见随书光盘中源代码/第2章/Sample2_6/ res/layout目录下的main.xml。

    1   <?xml version="1.0" encoding="utf-8"?>
    2   <AbsoluteLayout
    3      android:id="@+id/AbsoluteLayout01" android:layout_width="fill_parent"
    4      android:layout_height="fill_parent" android:background="#edab4a"
    5      xmlns:android="http://schemas.android.com/apk/res/android">
    6      <TextView
    7           android:layout_x="20dip" android:layout_y="20dip"
    8           android:layout_height="wrap_content"android:layout_width="wrap_content"
    9           android:id="@+id/TextView01" android:textColor="#FF0000"
    10          android:text="@string/uid">
    11       </TextView>                                <!--TextView控件-->
    12     <TextView
    13          android:layout_x="20dip" android:layout_y="80dip"
    14          android:layout_height="wrap_content"android:layout_width="wrap_content"
    15          android:id="@+id/TextView02" android:textColor="#FF0000"
    16          android:text="@string/pwd">
    17     </TextView>                                 <!--TextView控件-->
    18     <EditText
    19         android:layout_x="80dip" android:layout_y="20dip"
    20         android:layout_height="wrap_content" android:layout_width="180dip"
    21         android:id="@+id/EditText01">
    22     </EditText>                                 <!--EditText控件-->
    23     <EditText
    24         android:layout_x="80dip" android:layout_y="80dip"
    25         android:layout_height="wrap_content" android:layout_width="180dip"
    26         android:id="@+id/EditText02"android:password="true"
    27     >                               <!-- android:password设置是否为密码框 -->
    28     </EditText>                                 <!--EditText控件-->
    29       <Button
    30          android:layout_x="155dip" android:layout_y="140dip"
    31          android:layout_height="wrap_content" android:id="@+id/Button01"
    32          android:layout_width="wrap_content" android:text="@string/ok">
    33       </Button>                                  <!--Button控件-->
    34       <Button
    35          android:layout_x="210dip" android:layout_y="140dip"
    36          android:layout_height="wrap_content" android:id="@+id/Button02"
    37          android:layout_width="wrap_content" android:text="@string/cancel">
    38       </Button>                                  <!--Button控件-->
    39       <ScrollView                                <
    40         android:layout_x="10dip" android:layout_y="200dip"
    41         android:layout_height="220dip" android:layout_width="300dip"
    42         android:id="@+id/ScrollView01">          <!--ScrollView控件-->
    43          <EditText
    44             android:layout_width="fill_parent"   android:layout_height="wrap_content"
    45             android:id="@+id/EditText03" android:singleLine="false"
    46             android:gravity="top|center" android:enabled="false">
                                                      <!--EditText控件-->
    47          </EditText>                             <!--EditText控件-->
    48       </ScrollView>                              <!--ScrollView控件-->
    49  </AbsoluteLayout>

提示:在该xml文件中实现了布局的设置。总的布局为AbsoluteLayout布局。在总布局中,应用了TextView文本框控件、单行EditText控件、Button按钮控件、ScrollView滚动控件和多行EditText控件,并通过对各个控件的属性设置,实现了该小软件的界面效果。

上面已经介绍了本程序主界面main.xml的开发,接下来为读者介绍本程序具体功能的实现,代码如下。

代码位置:见随书光盘中源代码/第2章/Sample2_6/src/com/bn/ex2f目录下的Sample2_6_Activity.class。

    1   package com.bn. ex2f;                               //包名
    2   ……//该处省略了部分类的导入,读者可自行查看随书光盘中的源代码
    3   import android.app.Activity;                        //导入相关类
    4   public class Sample2_6_Activity extends Activity {  //继承自Activity类
    5      public void onCreate(Bundle savedInstanceState){//实现onCreate()方法
    6          super.onCreate(savedInstanceState);           //继承自父类的onCreate()
    7          setContentView(R.layout.main);                //显示main.xml界面
    8          final Button OkButton =(Button)findViewById(R.id.Button01);
                                                      //获取界面中的“确定”按钮对象
    9          final Button cancelButton =(Button)findViewById(R.id.Button02);
                                                      //获取界面中的“取消”按钮对象
    10         final EditText uid=(EditText)findViewById(R.id.EditText01);
    11         final EditText pwd=(EditText)findViewById(R.id.EditText02);
    12         final EditText log=(EditText)findViewById(R.id.EditText03);
    13     OkButton.setOnClickListener(                     //负责监听鼠标单击事件
    14           new View.OnClickListener()  {             //为“确定”按钮添加监听器
    15            public void onClick(View v){
    16               String uidStr=uid.getText().toString();//得到uid的字符串
    17               String pwdStr=pwd.getText().toString();//得到pwd的字符串
    18               log.append("用户名:"+uidStr+" 密码:"+pwdStr+"\n");
                                                            //实现信息的存储
    19            }});
    20     cancelButton.setOnClickListener(                 //负责监听鼠标单击事件
    21               new View.OnClickListener(){            //为取“消按”钮添加监听器
    22                public void onClick(View v){
    23                   uid.setText("");                   //清空输入文本
    24                   pwd.setText("");                   //清空输入文本
    25               }
    26          });
    27     }}

提示:在Activity类中,获取了按钮对象,并对其添加了按钮监听器,实现了单击“确定”按钮存储输入信息和单击“取消”按钮清空输入信息的功能。