Android入门到精通之界面编程从Button说起

移动开发 Android
Activity是单独的,用于处理用户操作。几乎所有的Activity都要和用户打交道,所以Activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到Activity创建的窗口上,当Activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合)或者嵌入到其他的Activity(使用ActivityGroup

Android 界面编程有两种基本的方法,一种是在代码中,动态创建一个个组件,及把这些组件用Layout来进行组合成复杂的界面展现。一种是用图形化的方式来编写 布局Layout,这些布局被保存在XML文件中,会编译成资源,被程序中的Activity来加载(setContentView()), 再通过findViewById方式来获得每一个界面组件的引用进行操作。对于大多数人来说,喜欢最直观的方式,既代码中动态生成的方式。我们就先从这里说起,至于可视化编程及布局资源的方式以后专门来讲述。

一,布局管理(Layout)

每一个界面组件都是View的子类,都可以单独占用一个屏幕,但是真正的有用的界面都是这些组件的组合,在Android中都是用各种Layout来进行布局管理,这与传统的J2SE中的一些AWT,SWING界面方式基本相同,这里就不多说。

二,一个单独的界面元素:

在前面说到Hello World例子中,讲过这样一段代码。在Activity中.

  1. public class HelloActivity extends Activity {  
  2.    /** Called when the activity is first created. */  
  3.    @Override  
  4.    public void onCreate(Bundle savedInstanceState) {  
  5.        super.onCreate(savedInstanceState);  
  6.        TextView tv = new TextView(this);  
  7.        tv.setText("Hello, World!");  
  8.        this.setContentView(tv);  
  9.         
  10.    }  

这里并没有用到Layout,这就是单独的组件方式。也可以改为:

 

  1. super.onCreate(savedInstanceState);  
  2. Button btn = new Button(this);  
  3. btn.setText("TestButton");  
  4. this.setContentView(btn); 

编译运行,会有一个全屏的Button,当然这不是你想要的实用的界面.那我们就用Layout来布局

  1. super.onCreate(savedInstanceState);  
  2. Button btn = new Button(this);  
  3. btn.setText("TestButton");  
  4. Button btn2 = new Button(this);  
  5. btn2.setText("TestButton2");  
  6. LinearLayout layout = new LinearLayout(this);  
  7. layout.setOrientation(LinearLayout.VERTICAL);  
  8. layout.addView(btn);  
  9. layout.addView(btn2);  
  10. this.setContentView(layout); 

编译运行,你就可以看到了两个上下排列的按钮,当然对于布局管理器的使用,做过PC 上AWT,SWING的人都不陌生,这里就不赘述。

那如何响应事件呢: 大家猜一猜?想必大家不难猜到,在AWT中,在手机的J2ME中,都是用Listener 来处理事件响应,Android也未能脱俗。这与Blackberry,Symbian中的Observer是同一个道理。都是使用了设计模式的观察者模式。下面来看一个能响应事件的例子。

  1. import android.app.Activity; import android.os.Bundle;  
  2. import android.view.View;  
  3. import android.view.View.OnClickListener;  
  4. import android.widget.Button;  
  5. import android.widget.LinearLayout;  
  6.  
  7. public class HelloActivity extends Activity implements OnClickListener {  
  8.   Button btn = null;  
  9.   Button btn2 = null;  
  10.     public void onClick(View v) {      
  11.   if (v ==  btn)  
  12.   {  
  13.       this.setTitle("You Clicked Button1");        
  14.   }  
  15.   if (v ==  btn2)  
  16.   {  
  17.       this.setTitle("You Clicked Button2");  
  18.   }    
  19.  }   
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         btn = new Button(this);  
  24.         btn2 = new Button(this);  
  25.         btn.setText("TestButton1");          
  26.         btn2.setText("TestButton2");  
  27.         btn.setOnClickListener(this);  
  28.         btn2.setOnClickListener(this);  
  29.         LinearLayout layout = new LinearLayout(this);  
  30.         layout.setOrientation(LinearLayout.VERTICAL);  
  31.         layout.addView(btn);  
  32.         layout.addView(btn2);  
  33.         this.setContentView(layout);         
  34.     }  

步骤是:

1、生成两个Button,配置Click事件监听者为HelloActivity ,此类实现了OnClickListener接口。

2、放入布局,按布局显示两个Button

3、按下其中一个Button,生成Click事件,调用HelloActivity 的OnClick接口函数。

4、对于View参数的值,判断是哪个View(Button)。改写Activity的Titile内容。注意,可别去对比View.getId(),缺省情况下,每个组件的Id值都为-1,除非人为设定Id值,用可视化编程时,为自动为其生成一个Id值。

【编辑推荐】

Activity页面切换的效果

Android四种Activity的加载模式

Android开发:Activity之间的传值

Android应用之Activity传参数与跳转

如何在Android模拟器中安装和卸载程序

责任编辑:zhaolei 来源: 互联网
相关推荐

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2016-12-08 22:39:40

Android

2012-02-29 00:49:06

Linux学习

2022-06-10 08:17:52

HashMap链表红黑树

2017-05-09 08:48:44

机器学习

2024-02-26 08:52:20

Python传递函数参数参数传递类型

2010-11-08 10:20:18

2022-09-02 15:11:18

开发工具

2024-11-25 18:37:09

2011-10-26 20:47:36

ssh 安全

2009-03-19 13:36:53

SSH安全通道远程

2024-06-07 08:51:50

OpenPyXLPythonExcel文件

2017-01-09 09:34:03

Docker容器传统虚拟机

2023-10-13 08:23:05

2009-07-03 18:49:00

网吧综合布线

2023-09-22 22:43:26

eval()Python

2024-04-11 14:00:28

2010-02-07 10:25:11

Android

2024-01-11 09:35:12

单元测试Python编程软件开发
点赞
收藏

51CTO技术栈公众号