免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2887 | 回复: 0
打印 上一主题 下一主题

android中框架设计的小总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-03 21:36 |只看该作者 |倒序浏览
这是对框架设计应用的一个小的总结
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、当你选取选项时,框架会反向呼叫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文件:
说明: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 adapter;   //声明一个泛型adapter
DataModel dm; //声明一个数据模型dm
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
dm = new DataModel(); //创建一个模型
lv = new ListView(this);   //创建一个列表视图
adapter = new ArrayAdapter(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(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;
}
}
下面同样是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> 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>的集合物件中。
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> loadData() {
ArrayList> coll= new ArrayList>();
Map item;
item = new HashMap();
item.put("prod_na", "Linux");
item.put("prod_type", "ST");
coll.add(item);
item = new HashMap();
item.put("prod_na", "Windows");
item.put("prod_type", "Mobile");
coll.add(item);
return coll;
}
}
下面介绍如何使用相对布局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 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
(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 arg0, View v, int idx, long arg3)
{
status[idx] = ! status[idx];
}
}
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 adapter = new ArrayAdapter
(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();
}
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/73521/showart_1678329.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP