阅读更多 这是对框架设计应用的一个小的总结
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文件:<?xml version="1.0" encoding="utf-8"?>

说明: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;   //声明一个泛型adapterDataModel 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;elsereturn 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> coll;@Overridepublic 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;}}<?xml version="1.0" encoding="utf-8"?>下面介绍如何使用相对布局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 };@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);//这诞生了一个相对布局物件,并设定为此Activity的起始书面布局RelativeLayout r_layout = new RelativeLayout(this); setContentView(r_layout);//取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflateLayoutInflater 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< 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"?>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 = "****";@Overridepublic 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 stubsetTitle(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 stubfinish();}

}



更多相关文章

  1. Android点击按钮播放音效
  2. 在Android studio中无法实时显示布局的问题
  3. android一键清除最近应用按钮
  4. Android 5.0新控件 FloatingActionButton | 悬浮按钮 介绍及使用
  5. android studio 引入另一个XML文件的布局控件
  6. android 我的功能模块模板布局之一
  7. 防止Android点击按钮过快造成多次事件实现原理
  8. Android中RadioGroup RadioButton CheckBox多选按钮实现方法以及
  9. Android 怎么防止AlertDialog Button按钮字母变大写

随机推荐

  1. Github 封禁了有伊朗外部贡献者的项目!
  2. 程序员又开始了疯狂的薅羊毛!
  3. 恒丰银行:金融云中 x86 裸机服务实践
  4. 重要 | mr使用hcatalog读写hive表
  5. 44 页的 JVM 2020 生态报告!
  6. 微信海量数据监控的设计与实践
  7. 必会:关于SparkStreaming checkpoint那些
  8. 从零搭建一个自动化运维体系
  9. 程序员在 Github 上疯狂薅羊毛!
  10. 打不赢,就封号!孙杨上诉翻案率仅约7%?