您的位置:首页 > 移动开发 > Android开发

android中框架设计的小总结

2010-01-29 11:12 176 查看
这是对框架设计应用的一个小的总结
package com.misoo.ex01;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class ex01 extends Activity {

public static final int ADD_ID = Menu.FIRST;

public static final int DELETE_ID = Menu.FIRST + 1;

public static final int EXIT_ID = Menu.FIRST + 2;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main); }

@Override public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

menu.add(0, ADD_ID, 0, R.string.menu_add);

menu.add(0, DELETE_ID, 1, R.string.menu_delete);

menu.add(0, EXIT_ID, 2, R.string.menu_exit);

return true; }

@Override public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case ADD_ID: setTitle("Insert..."); break;

case DELETE_ID: setTitle("Delete..."); break;

case EXIT_ID: finish(); break;

}

return super.onOptionsItemSelected(item);

}}

说明:

1、一开始,框架反向呼叫onCreate()函数,也呼叫onCreateOptionsMenu()函数

2、当你选取<Add Item>选项时,框架会反向呼叫onOptionsItemSelected()函数

在我们修改了/res/values/strings.xml内容之后,记住要存档,因为这样可以更新R.java的内容,让menu.add()指令能找到所要的字符串。
1、R.java是连接*.java的程序码档案和*.xml布局档案的中介桥梁。
2、在.xml档案中,Eclipse根据其内的内容而自动产生一个R类别,作为应用程序设计者,并不需要去修改它。
3、当这些.xml档案有更新时,Eclipse就会在你确认并将*.xml存档时,自动更新它。
4、更加方便地去管理资源。
下面来介绍如何呈现按钮
首先来看看构建按钮的一般的步骤:
package com.misoo.ex02;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ex02 extends Activity implements OnClickListener {
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button);
Button btn2 = (Button)findViewById(R.id.button2);
btn.setOnClickListener(this);
btn2.setOnClickListener(this);
}
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.button:
setTitle("this is OK button");
break;
case R.id.button2:
this.finish();
break;
}
}}

下面是对应的.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
/>
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
/>
</LinearLayout>
说明:Button btn=(Button)findViewById(R.id.button);找出目前的布局里的按钮参考,并存放人btn内。
指令btn.setOnClickListener(this)设定按钮事件的处理程式,应额外事件监听者。当使用者按下id值为id/button的按钮时,框架必须把事件准确地传送到恰当的类别,并呼叫所指定的函数。其中的参数:this就表示此按钮事件必须传送到本地类别的物件,也就是目前物件。
当然,还可以创建出带有背景的按钮,对应的类别为ImageButton.

下面介绍如何进行书面的布局
1、像按钮这种屏幕控制项,在Android中,则通讲为View,其中,像Button是最小单元的View,多个小的View可以构成一个集合类型的View。
2、多个View能组合在一起,就会各种排列方式,即讲布局Layout.
3、最基本的布局为:垂直和水平排列
import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;

public class ex04 extends Activity {
private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//下面这两条指令诞生一个LinearLayout的集合型的View物件,并且设定为垂直类型布局

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

ImageButton btn = new ImageButton(this);

Drawable dw = this.getResources().getDrawable(R.drawable.ok); //Drawable类型??
btn.setImageDrawable(dw); //设置btn的图像为dw.
btn.setOnClickListener(listener);
//下面的指令诞生一个LayoutParams物件,并且把WC参数存入该物件里,此参数说明了我们希望这个按钮的长宽大小
LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(WC, WC);
layout.addView(btn, param);
ImageButton btn2 = new ImageButton(this);
dw = this.getResources().getDrawable(R.drawable.exit);
btn2.setImageDrawable(dw);
btn2.setOnClickListener(listener2);
layout.addView(btn2, param); //将ImageButton或是Button物件加入到layout里成为一组
LinearLayout out_layout = new LinearLayout(this);
out_layout.setOrientation(LinearLayout.HORIZONTAL);
Button btn3 = new Button(this);
btn3.setText("Cancel");
btn3.setTextColor(Color.WHITE);
btn3.setBackgroundColor(Color.RED);
btn3.setOnClickListener(listener3);

out_layout.addView(layout, param);
LinearLayout.LayoutParams param2 =new LinearLayout.LayoutParams(WC, WC);
param2.topMargin = 30;
out_layout.addView(btn3, param2);
setContentView(out_layout);
}

OnClickListener listener = new OnClickListener(){
public void onClick(View v)
{ setTitle("this is OK button"); }
};
OnClickListener listener2 = new OnClickListener() {
public void onClick(View v)
{ finish(); }
};

OnClickListener listener3 = new OnClickListener() {
public void onClick(View v)
{ setTitle("this is Cancel button"); }
};
}

下面介绍如何呈现List选单
这个程式展现了MVC的基本架构
Activity 对应着的是Controller
ListView 对应着的是View
DataModel对应着的是Model
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
public class ex05 extends Activity implements OnItemClickListener {
public static final int RELOAD_ID = Menu.FIRST;
public static final int EXIT_ID = Menu.FIRST + 1;
ListView lv;
ArrayAdapter<String> adapter;   //声明一个泛型adapter
DataModel dm; //声明一个数据模型dm
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
dm = new DataModel(); //创建一个模型
lv = new ListView(this);   //创建一个列表视图
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());

//这诞生一个ArrayAdapter的物件,并呼叫dm.loadData()函数取得选单所需要的内容,存入此新的物件里。

lv.setAdapter(adapter); //向adapter物件取得选单内容

lv.setOnItemClickListener(this);   //设定ListView选单时间的处理程式,又称为事件监听者。
setContentView(lv);

}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)  //这是列表视图操作所响应的事
{
setTitle("choice: " + String.valueOf(dm.getPrice(arg2)));
}
@Override public boolean onCreateOptionsMenu(Menu menu)  //这个操作是用来进行菜单的选项的设计的

{

super.onCreateOptionsMenu(menu);  //对于菜单的设计,在使用onCreateOptionMenu时,都需要这个操作,即让父类来实现绘画功能
menu.add(0, RELOAD_ID, 0, "Reload");  //添加菜单选项
MenuItem im = menu.findItem(RELOAD_ID);   //
im.setIcon(R.drawable.reload_im);
menu.add(0, EXIT_ID, 1, "Exit");
im = menu.findItem(EXIT_ID);
im.setIcon(R.drawable.exit_im);
return true;

}

@Override public boolean onOptionsItemSelected(MenuItem item) //这个选项是在选择菜单时所产生的动作
{
switch (item.getItemId()) {
case RELOAD_ID:  //如果选择的是第一个菜单,那么就执行下面的这个功能
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());
lv.setAdapter(adapter);

break;
case EXIT_ID:   //如果选择的是第二个菜单,那么就执行退出操作
finish();
break;

}

return super.onOptionsItemSelected(item);

}

}

public class DataModel {

private String[]data, xdata;

private double[] price;

private boolean k = true;

public DataModel()

{

data = new String[3];

data[0] = "Item-1";

data[1] = "Item-2";

data[2] = "Item-3";

xdata = new String[3];

xdata[0] = "Prod-x";

xdata[1] = "Prod-y";

xdata[2] = "Prod-z";

price = new double[3];

price[0] = 305.5;

price[1] = 56.75;

price[2] = 100.25;

}

public String[] loadData() {

k = !k;

if(k)

return xdata;

else

return data;

}

public double getPrice(int i)

{

return price[i];

}

}

下面同样是ListView多对应的功能

package com.misoo.ex06;

import java.util.ArrayList;

import java.util.Map;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class ex06 extends Activity {

private ListView lv;

private TextView tv;

private DataModel dm;

private ArrayList<Map<String, Object>> coll;

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

dm = new DataModel();

setContentView(R.layout.list);

lv = (ListView)findViewById(R.id.list);

lv.setOnItemClickListener(listener);

tv = (TextView)findViewById(R.id.text);

//下面的dm.loadData()呼叫DataModel的loadData()函数将xml字符串或者是表格资料加入到ArrayList<Map<String,Object>>的集合物件中。

coll = dm.loadData();

//下面的指令将coll集合物件的资料传给SimpleAdapter物件,SimpleAdapter物件依据参数的

指定来从coll取出资料,并设定显示的树形等等。

SimpleAdapter adapter = new SimpleAdapter(this, coll,android.R.layout.simple_list_item_1, new String[] { "prod_na" },new int[] {android.R.id.text1});

lv.setAdapter(adapter); //将SimpleAdapter物件传送给ListView物件,立即更新了书面上List选单的内容.

}

OnItemClickListener listener = new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)

{

tv.setTextColor(Color.YELLOW);

tv.setText(coll.get(arg2).get("prod_type").toString());

}

};

}

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

public class DataModel {

public DataModel() {}

public ArrayList<Map<String, Object>> loadData() {

ArrayList<Map<String, Object>> coll= new ArrayList<Map<String, Object>>();

Map<String, Object> item;

item = new HashMap<String, Object>();

item.put("prod_na", "Linux");

item.put("prod_type", "ST");

coll.add(item);

item = new HashMap<String, Object>();

item.put("prod_na", "Windows");

item.put("prod_type", "Mobile");

coll.add(item);

return coll;

}

}

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World, ex06"

/>

<ListView android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

</LinearLayout>

下面介绍如何使用相对布局Relative Layout

分析下面的这段代码:

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.view.LayoutInflater;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class ex07 extends Activity implements OnItemClickListener {

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

private String[] data = {" Item-1 ", " Item-2 ", " Item-3 "};

private TextView tv;

private String selection = "****";

private ArrayAdapter<String> adapter;

private boolean[] status = {false, false, false };

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//这诞生了一个相对布局物件,并设定为此Activity的起始书面布局

RelativeLayout r_layout = new RelativeLayout(this); 

setContentView(r_layout);

//取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate

LayoutInflater inflate = (LayoutInflater)

getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);

RelativeLayout.LayoutParams param

= new RelativeLayout.LayoutParams(175, WC);

layout.setId(1);

r_layout.addView(layout, param);

tv = (TextView)layout.findViewById(R.id.text);

ListView lv = (ListView)layout.findViewById(R.id.list);

lv.setBackgroundResource(R.drawable.bk_red);

adapter = new ArrayAdapter<String>

(this, android.R.layout.simple_list_item_multiple_choice, data);

lv.setAdapter(adapter); lv.setItemsCanFocus(false);

lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

lv.setOnItemClickListener( this);

Button btn1 = new Button(this);

btn1.setBackgroundResource(R.drawable.bk_ok_exit);

btn1.setId(2); btn1.setText("OK"); btn1.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.RIGHT_OF, 1);

param.leftMargin = 15; param.topMargin = 20;

r_layout.addView(btn1, param);

Button btn2 = new Button(this);

btn2.setBackgroundResource(R.drawable.bk_ok_exit);

btn2.setId(3); btn2.setText("Exit"); btn2.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.BELOW, 2);

param.addRule(RelativeLayout.ALIGN_LEFT, 2);

param.topMargin = 25;

r_layout.addView(btn2, param);

}

OnClickListener listener = new OnClickListener() {

public void onClick(View v) {

if(v.getId() == 2){

String ss = "{";

for(int i=0; i< adapter.getCount(); i++){

if(status[i])

{

ss += data[i]; ss += " ";

}

}

ss += "}";

setTitle(ss);

}

else if(v.getId() == 3)

finish();

}};

public void onItemClick(AdapterView<?> arg0, View v, int idx, long arg3)

{

status[idx] = ! status[idx];

}

}

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World, ex07" />

<ListView android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

package com.misoo.ex07;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.view.LayoutInflater;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

//此程序是采用相对布局方式。所谓的相对是指定我们叙述一个组件的位置时,会以其中的另外一个组件为基准。

public class ex07 extends Activity implements OnItemClickListener {

/** Called when the activity is first created. */

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

private String[] data = {"Item-1", "Item-2", "Item-3"};

private TextView tv;

private String selection = "****";

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//下面代码诞生了一个相对布局物件,并设定为此Activity的起始书面布局

RelativeLayout r_layout = new RelativeLayout(this);

setContentView(r_layout);

//下面代码取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate,但是为什么要获得系统服务呢?

LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//下面指令呼叫inflate物件的inflate()函数依据/res/layout/list.xml之定义而诞生一个LinearLayout物件

LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);

//这诞生一个RelativeLayout的参数物件,透过参数物件来设置此layout集合布局的宽度为120点,而高则视其内容而定。

RelativeLayout.LayoutParams param

= new RelativeLayout.LayoutParams(120, WC);

layout.setId(1); //

r_layout.addView(layout, param);

//下面两句代码分别找出layout里面的两个小View,并由tv和lv分别参考之

tv = (TextView)layout.findViewById(R.id.text);

ListView lv = (ListView)layout.findViewById(R.id.list);

//下面这句代码从data[]阵列取出资料,并交给lv物件,将显示于书面的List选单里

ArrayAdapter<String> adapter = new ArrayAdapter<String>

(this, android.R.layout.simple_list_item_1, data);

lv.setAdapter(adapter);

lv.setOnItemClickListener(this);

//------------------------------------------------------

Button btn1 = new Button(this);

btn1.setId(2);

btn1.setText("OK");

btn1.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.RIGHT_OF, 1);

param.leftMargin = 15;

param.topMargin = 20;

r_layout.addView(btn1, param);

//------------------------------------------------------

Button btn2 = new Button(this);

btn2.setId(3);

btn2.setText("Exit");

btn2.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.BELOW, 2);

param.addRule(RelativeLayout.ALIGN_LEFT, 2);

param.topMargin = 25;

r_layout.addView(btn2, param);

}

OnClickListener listener = new OnClickListener()

{

public void onClick(View v) {

if(v.getId() == 2)

tv.setText(selection);

else if(v.getId() == 3)

finish();

}

};

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

// TODO Auto-generated method stub

setTitle(data[arg2]);

selection = data[arg2];

}

}

package com.misoo.ex08;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.EditText;

import android.widget.TableLayout;

import android.widget.TableRow;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

public class ex08 extends Activity implements OnClickListener {

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//根据下面所说的嵌套层次,首先是定义最大的view,并设定为目前布局(this值)

RelativeLayout r_layout = new RelativeLayout(this);

setContentView(r_layout);

//当书面上的一群view排成一个矩阵或者是表格形式时,就采用TableLayout来叙述其布局方式。

//接着定义第二个的TableLayout,并加入到r_layout里

TableLayout tableLayout = new TableLayout(this);

r_layout.addView(tableLayout, new RelativeLayout.LayoutParams(WC, WC));

tableLayout.setId(1);

//此程序采用的嵌套层次为:RelativeLayout->TableLayout->TableRow->EditText->Button->ImageView

//再定义第三个的TableRow,并加入到tableLayout里

TableRow tableRow1 = new TableRow(this);

tableLayout.addView(tableRow1, new TableLayout.LayoutParams(WC, WC));

//最后定义最小的view,并加入到tableRow里

ImageView iv = new ImageView(this);

tableRow1.addView(iv);

iv.setImageDrawable(getResources().getDrawable(R.drawable.star_big_on));

EditText edit1 = new EditText(this);

tableRow1.addView(edit1);

//-------------------------------------------------

TableRow tableRow2 = new TableRow(this);

tableLayout.addView(tableRow2, new TableLayout.LayoutParams(WC, WC));

ImageView iv2 = new ImageView(this);

iv2.setImageDrawable(getResources().getDrawable(R.drawable.gallery_photo_4));

tableRow2.addView(iv2);

EditText edit2 = new EditText(this);

tableRow2.addView(edit2);

//-------------------------------------------------

Button btn = new Button(this);

RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(WC, WC);

param.addRule(RelativeLayout.BELOW, 1);

param.topMargin = 20;

r_layout.addView(btn, param);

btn.setText("Exit");

btn.setOnClickListener(this);

}

public void onClick(View arg0) {

// TODO Auto-generated method stub

finish();

}

}

这是对框架设计应用的一个小的总结
package com.misoo.ex01;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class ex01 extends Activity {

public static final int ADD_ID = Menu.FIRST;

public static final int DELETE_ID = Menu.FIRST + 1;

public static final int EXIT_ID = Menu.FIRST + 2;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main); }

@Override public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

menu.add(0, ADD_ID, 0, R.string.menu_add);

menu.add(0, DELETE_ID, 1, R.string.menu_delete);

menu.add(0, EXIT_ID, 2, R.string.menu_exit);

return true; }

@Override public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case ADD_ID: setTitle("Insert..."); break;

case DELETE_ID: setTitle("Delete..."); break;

case EXIT_ID: finish(); break;

}

return super.onOptionsItemSelected(item);

}}

说明:

1、一开始,框架反向呼叫onCreate()函数,也呼叫onCreateOptionsMenu()函数

2、当你选取<Add Item>选项时,框架会反向呼叫onOptionsItemSelected()函数

在我们修改了/res/values/strings.xml内容之后,记住要存档,因为这样可以更新R.java的内容,让menu.add()指令能找到所要的字符串。
1、R.java是连接*.java的程序码档案和*.xml布局档案的中介桥梁。
2、在.xml档案中,Eclipse根据其内的内容而自动产生一个R类别,作为应用程序设计者,并不需要去修改它。
3、当这些.xml档案有更新时,Eclipse就会在你确认并将*.xml存档时,自动更新它。
4、更加方便地去管理资源。
下面来介绍如何呈现按钮
首先来看看构建按钮的一般的步骤:
package com.misoo.ex02;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ex02 extends Activity implements OnClickListener {
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button);
Button btn2 = (Button)findViewById(R.id.button2);
btn.setOnClickListener(this);
btn2.setOnClickListener(this);
}
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.button:
setTitle("this is OK button");
break;
case R.id.button2:
this.finish();
break;
}
}}

下面是对应的.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
/>
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
/>
</LinearLayout>
说明:Button btn=(Button)findViewById(R.id.button);找出目前的布局里的按钮参考,并存放人btn内。
指令btn.setOnClickListener(this)设定按钮事件的处理程式,应额外事件监听者。当使用者按下id值为id/button的按钮时,框架必须把事件准确地传送到恰当的类别,并呼叫所指定的函数。其中的参数:this就表示此按钮事件必须传送到本地类别的物件,也就是目前物件。
当然,还可以创建出带有背景的按钮,对应的类别为ImageButton.

下面介绍如何进行书面的布局
1、像按钮这种屏幕控制项,在Android中,则通讲为View,其中,像Button是最小单元的View,多个小的View可以构成一个集合类型的View。
2、多个View能组合在一起,就会各种排列方式,即讲布局Layout.
3、最基本的布局为:垂直和水平排列
import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;

public class ex04 extends Activity {
private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//下面这两条指令诞生一个LinearLayout的集合型的View物件,并且设定为垂直类型布局

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

ImageButton btn = new ImageButton(this);

Drawable dw = this.getResources().getDrawable(R.drawable.ok); //Drawable类型??
btn.setImageDrawable(dw); //设置btn的图像为dw.
btn.setOnClickListener(listener);
//下面的指令诞生一个LayoutParams物件,并且把WC参数存入该物件里,此参数说明了我们希望这个按钮的长宽大小
LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(WC, WC);
layout.addView(btn, param);
ImageButton btn2 = new ImageButton(this);
dw = this.getResources().getDrawable(R.drawable.exit);
btn2.setImageDrawable(dw);
btn2.setOnClickListener(listener2);
layout.addView(btn2, param); //将ImageButton或是Button物件加入到layout里成为一组
LinearLayout out_layout = new LinearLayout(this);
out_layout.setOrientation(LinearLayout.HORIZONTAL);
Button btn3 = new Button(this);
btn3.setText("Cancel");
btn3.setTextColor(Color.WHITE);
btn3.setBackgroundColor(Color.RED);
btn3.setOnClickListener(listener3);

out_layout.addView(layout, param);
LinearLayout.LayoutParams param2 =new LinearLayout.LayoutParams(WC, WC);
param2.topMargin = 30;
out_layout.addView(btn3, param2);
setContentView(out_layout);
}

OnClickListener listener = new OnClickListener(){
public void onClick(View v)
{ setTitle("this is OK button"); }
};
OnClickListener listener2 = new OnClickListener() {
public void onClick(View v)
{ finish(); }
};

OnClickListener listener3 = new OnClickListener() {
public void onClick(View v)
{ setTitle("this is Cancel button"); }
};
}

下面介绍如何呈现List选单
这个程式展现了MVC的基本架构
Activity 对应着的是Controller
ListView 对应着的是View
DataModel对应着的是Model
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
public class ex05 extends Activity implements OnItemClickListener {
public static final int RELOAD_ID = Menu.FIRST;
public static final int EXIT_ID = Menu.FIRST + 1;
ListView lv;
ArrayAdapter<String> adapter;   //声明一个泛型adapter
DataModel dm; //声明一个数据模型dm
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
dm = new DataModel(); //创建一个模型
lv = new ListView(this);   //创建一个列表视图
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());

//这诞生一个ArrayAdapter的物件,并呼叫dm.loadData()函数取得选单所需要的内容,存入此新的物件里。

lv.setAdapter(adapter); //向adapter物件取得选单内容

lv.setOnItemClickListener(this);   //设定ListView选单时间的处理程式,又称为事件监听者。
setContentView(lv);

}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)  //这是列表视图操作所响应的事
{
setTitle("choice: " + String.valueOf(dm.getPrice(arg2)));
}
@Override public boolean onCreateOptionsMenu(Menu menu)  //这个操作是用来进行菜单的选项的设计的

{

super.onCreateOptionsMenu(menu);  //对于菜单的设计,在使用onCreateOptionMenu时,都需要这个操作,即让父类来实现绘画功能
menu.add(0, RELOAD_ID, 0, "Reload");  //添加菜单选项
MenuItem im = menu.findItem(RELOAD_ID);   //
im.setIcon(R.drawable.reload_im);
menu.add(0, EXIT_ID, 1, "Exit");
im = menu.findItem(EXIT_ID);
im.setIcon(R.drawable.exit_im);
return true;

}

@Override public boolean onOptionsItemSelected(MenuItem item) //这个选项是在选择菜单时所产生的动作
{
switch (item.getItemId()) {
case RELOAD_ID:  //如果选择的是第一个菜单,那么就执行下面的这个功能
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());
lv.setAdapter(adapter);

break;
case EXIT_ID:   //如果选择的是第二个菜单,那么就执行退出操作
finish();
break;

}

return super.onOptionsItemSelected(item);

}

}

public class DataModel {

private String[]data, xdata;

private double[] price;

private boolean k = true;

public DataModel()

{

data = new String[3];

data[0] = "Item-1";

data[1] = "Item-2";

data[2] = "Item-3";

xdata = new String[3];

xdata[0] = "Prod-x";

xdata[1] = "Prod-y";

xdata[2] = "Prod-z";

price = new double[3];

price[0] = 305.5;

price[1] = 56.75;

price[2] = 100.25;

}

public String[] loadData() {

k = !k;

if(k)

return xdata;

else

return data;

}

public double getPrice(int i)

{

return price[i];

}

}

下面同样是ListView多对应的功能

package com.misoo.ex06;

import java.util.ArrayList;

import java.util.Map;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class ex06 extends Activity {

private ListView lv;

private TextView tv;

private DataModel dm;

private ArrayList<Map<String, Object>> coll;

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

dm = new DataModel();

setContentView(R.layout.list);

lv = (ListView)findViewById(R.id.list);

lv.setOnItemClickListener(listener);

tv = (TextView)findViewById(R.id.text);

//下面的dm.loadData()呼叫DataModel的loadData()函数将xml字符串或者是表格资料加入到ArrayList<Map<String,Object>>的集合物件中。

coll = dm.loadData();

//下面的指令将coll集合物件的资料传给SimpleAdapter物件,SimpleAdapter物件依据参数的

指定来从coll取出资料,并设定显示的树形等等。

SimpleAdapter adapter = new SimpleAdapter(this, coll,android.R.layout.simple_list_item_1, new String[] { "prod_na" },new int[] {android.R.id.text1});

lv.setAdapter(adapter); //将SimpleAdapter物件传送给ListView物件,立即更新了书面上List选单的内容.

}

OnItemClickListener listener = new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)

{

tv.setTextColor(Color.YELLOW);

tv.setText(coll.get(arg2).get("prod_type").toString());

}

};

}

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

public class DataModel {

public DataModel() {}

public ArrayList<Map<String, Object>> loadData() {

ArrayList<Map<String, Object>> coll= new ArrayList<Map<String, Object>>();

Map<String, Object> item;

item = new HashMap<String, Object>();

item.put("prod_na", "Linux");

item.put("prod_type", "ST");

coll.add(item);

item = new HashMap<String, Object>();

item.put("prod_na", "Windows");

item.put("prod_type", "Mobile");

coll.add(item);

return coll;

}

}

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World, ex06"

/>

<ListView android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

</LinearLayout>

下面介绍如何使用相对布局Relative Layout

分析下面的这段代码:

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.view.LayoutInflater;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class ex07 extends Activity implements OnItemClickListener {

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

private String[] data = {" Item-1 ", " Item-2 ", " Item-3 "};

private TextView tv;

private String selection = "****";

private ArrayAdapter<String> adapter;

private boolean[] status = {false, false, false };

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//这诞生了一个相对布局物件,并设定为此Activity的起始书面布局

RelativeLayout r_layout = new RelativeLayout(this); 

setContentView(r_layout);

//取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate

LayoutInflater inflate = (LayoutInflater)

getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);

RelativeLayout.LayoutParams param

= new RelativeLayout.LayoutParams(175, WC);

layout.setId(1);

r_layout.addView(layout, param);

tv = (TextView)layout.findViewById(R.id.text);

ListView lv = (ListView)layout.findViewById(R.id.list);

lv.setBackgroundResource(R.drawable.bk_red);

adapter = new ArrayAdapter<String>

(this, android.R.layout.simple_list_item_multiple_choice, data);

lv.setAdapter(adapter); lv.setItemsCanFocus(false);

lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

lv.setOnItemClickListener( this);

Button btn1 = new Button(this);

btn1.setBackgroundResource(R.drawable.bk_ok_exit);

btn1.setId(2); btn1.setText("OK"); btn1.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.RIGHT_OF, 1);

param.leftMargin = 15; param.topMargin = 20;

r_layout.addView(btn1, param);

Button btn2 = new Button(this);

btn2.setBackgroundResource(R.drawable.bk_ok_exit);

btn2.setId(3); btn2.setText("Exit"); btn2.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.BELOW, 2);

param.addRule(RelativeLayout.ALIGN_LEFT, 2);

param.topMargin = 25;

r_layout.addView(btn2, param);

}

OnClickListener listener = new OnClickListener() {

public void onClick(View v) {

if(v.getId() == 2){

String ss = "{";

for(int i=0; i< adapter.getCount(); i++){

if(status[i])

{

ss += data[i]; ss += " ";

}

}

ss += "}";

setTitle(ss);

}

else if(v.getId() == 3)

finish();

}};

public void onItemClick(AdapterView<?> arg0, View v, int idx, long arg3)

{

status[idx] = ! status[idx];

}

}

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World, ex07" />

<ListView android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

package com.misoo.ex07;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.view.LayoutInflater;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

//此程序是采用相对布局方式。所谓的相对是指定我们叙述一个组件的位置时,会以其中的另外一个组件为基准。

public class ex07 extends Activity implements OnItemClickListener {

/** Called when the activity is first created. */

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

private String[] data = {"Item-1", "Item-2", "Item-3"};

private TextView tv;

private String selection = "****";

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//下面代码诞生了一个相对布局物件,并设定为此Activity的起始书面布局

RelativeLayout r_layout = new RelativeLayout(this);

setContentView(r_layout);

//下面代码取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate,但是为什么要获得系统服务呢?

LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//下面指令呼叫inflate物件的inflate()函数依据/res/layout/list.xml之定义而诞生一个LinearLayout物件

LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);

//这诞生一个RelativeLayout的参数物件,透过参数物件来设置此layout集合布局的宽度为120点,而高则视其内容而定。

RelativeLayout.LayoutParams param

= new RelativeLayout.LayoutParams(120, WC);

layout.setId(1); //

r_layout.addView(layout, param);

//下面两句代码分别找出layout里面的两个小View,并由tv和lv分别参考之

tv = (TextView)layout.findViewById(R.id.text);

ListView lv = (ListView)layout.findViewById(R.id.list);

//下面这句代码从data[]阵列取出资料,并交给lv物件,将显示于书面的List选单里

ArrayAdapter<String> adapter = new ArrayAdapter<String>

(this, android.R.layout.simple_list_item_1, data);

lv.setAdapter(adapter);

lv.setOnItemClickListener(this);

//------------------------------------------------------

Button btn1 = new Button(this);

btn1.setId(2);

btn1.setText("OK");

btn1.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.RIGHT_OF, 1);

param.leftMargin = 15;

param.topMargin = 20;

r_layout.addView(btn1, param);

//------------------------------------------------------

Button btn2 = new Button(this);

btn2.setId(3);

btn2.setText("Exit");

btn2.setOnClickListener(listener);

param = new RelativeLayout.LayoutParams(60, WC);

param.addRule(RelativeLayout.BELOW, 2);

param.addRule(RelativeLayout.ALIGN_LEFT, 2);

param.topMargin = 25;

r_layout.addView(btn2, param);

}

OnClickListener listener = new OnClickListener()

{

public void onClick(View v) {

if(v.getId() == 2)

tv.setText(selection);

else if(v.getId() == 3)

finish();

}

};

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

// TODO Auto-generated method stub

setTitle(data[arg2]);

selection = data[arg2];

}

}

package com.misoo.ex08;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.EditText;

import android.widget.TableLayout;

import android.widget.TableRow;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

public class ex08 extends Activity implements OnClickListener {

private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

@Override public void onCreate(Bundle icicle) {

super.onCreate(icicle);

//根据下面所说的嵌套层次,首先是定义最大的view,并设定为目前布局(this值)

RelativeLayout r_layout = new RelativeLayout(this);

setContentView(r_layout);

//当书面上的一群view排成一个矩阵或者是表格形式时,就采用TableLayout来叙述其布局方式。

//接着定义第二个的TableLayout,并加入到r_layout里

TableLayout tableLayout = new TableLayout(this);

r_layout.addView(tableLayout, new RelativeLayout.LayoutParams(WC, WC));

tableLayout.setId(1);

//此程序采用的嵌套层次为:RelativeLayout->TableLayout->TableRow->EditText->Button->ImageView

//再定义第三个的TableRow,并加入到tableLayout里

TableRow tableRow1 = new TableRow(this);

tableLayout.addView(tableRow1, new TableLayout.LayoutParams(WC, WC));

//最后定义最小的view,并加入到tableRow里

ImageView iv = new ImageView(this);

tableRow1.addView(iv);

iv.setImageDrawable(getResources().getDrawable(R.drawable.star_big_on));

EditText edit1 = new EditText(this);

tableRow1.addView(edit1);

//-------------------------------------------------

TableRow tableRow2 = new TableRow(this);

tableLayout.addView(tableRow2, new TableLayout.LayoutParams(WC, WC));

ImageView iv2 = new ImageView(this);

iv2.setImageDrawable(getResources().getDrawable(R.drawable.gallery_photo_4));

tableRow2.addView(iv2);

EditText edit2 = new EditText(this);

tableRow2.addView(edit2);

//-------------------------------------------------

Button btn = new Button(this);

RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(WC, WC);

param.addRule(RelativeLayout.BELOW, 1);

param.topMargin = 20;

r_layout.addView(btn, param);

btn.setText("Exit");

btn.setOnClickListener(this);

}

public void onClick(View arg0) {

// TODO Auto-generated method stub

finish();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: