1、怎样在MainActivity中为Button的点击事件绑定一个监听器?(四种方式)
 <1>a.查找控件

//查找控件按钮
   private Button button1;
   button1 = (Button) findViewById(R.id.button1);
     b.创建一个类,实现OnClickListener接口,重写里面的OnClick()方法
   //OnClickListener()是按钮的监听器类对象,当按钮被点击的时候。
   class MyListener  implements  OnClickListener{
    //当按钮被点击的时候,会自动调用的方法
    @Override
    //v:事件源。被点击的那个控件
    public void OnClick(View v){
    //这里写被点击之后要执行的任务
     button1.setText("点击之后改变的文本内容"+new Date());
    }
   }
     c.用查找到的控件去绑定监听器对象。(按钮对象.setOnClickListener(监听器对象))
   MyListener  listener =new MyListener();
   //绑定按钮的被点击的监听器
   button1.setOnClickListener(listener);
  <2>a.查找控件
   private  Button  button2;
   button2=(Button) findViewById(R.id.button2);
     b.让当前类实现OnClickListener接口,重写里面的OnClick()方法
   public class MainActivity extends Activity implements OnClickListener{
    @Override
    public void onClick(View v) {
    //在这里写当按钮被点击之后要做的任务
     ......
    }
   }
     c.用查找到的控件去绑定监听器对象。(按钮对象.setOnClickListener(this))
   button2.setOnClickListener(this);
  <3>a.查找控件
   private Button button3;
   button3=(Button)findViewById(R.id.button3);
     b.用匿名内部类绑定监听器
   button3.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    //在这里写当按钮被点击之后要做的任务
     ......
    }
   });
  <4>a.查找布局
   private LinearLayout layout;
   layout=(LinearLayout)findViewById(R.id.layout);
     b.在控件的属性中声明OnClick="方法名"
   android:onClick="btnChange"
     c.在java文件中写一个方法
   public void 方法名(View v){
    //在这里写当按钮被点击之后要做的任务
    ......
   }
  总结:如果有多个按钮绑定同一个监听器,除了匿名内部类的写法,其他三种方法都可以。
 2、怎么实现多个按钮绑定同一个监听器?
  <1>查找控件
   private Button btn_showText;
   provate Button btn_showLog;
   btn_showText=(Button)findViewById(R.id.btn_showText);
   btn_showLog=(Button)findViewById(R.id.btn_showLog);
  <2>创建一个类,实现OnClickListener接口,重写里面的OnClick()方法
   class  BtnListener implements OnClickListener{
    @Override
    public void onClick(View v) {
     //获取事件源(被点击的按钮)的id
     int id=v.getId();
    switch(id){
    case R.id.btn_showLog:
     //这里写当点击btn_showLog是要完成的任务
     ......
     break;
    case R.id.btn_showText:
     //这里写当点击btn_showText是要完成的任务
     ......
     break;
    ....
    }
   }
  <3>用查找到的控件去绑定同一个监听器对象
   BtnListener  listener =new BtnListener();
   //两个按钮绑定的监听器对象为同一个
   btn_showText.setOnClickListener(listener);
   btn_showLog.setOnClickListener(listener);
 3、怎么创建一个Activity?
  <1>创建一个类,继承Activity
   public class SecondActivity extends Activity{}
  <2>重写onCreate()生命周期方法,并且在里面调用setContentView()方法绑定要显示的布局文件
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_second);
   }
  <3>在清单配置文件中注册
  <!--  注册activity    只需要写一个必要的属性name-->
  <activity android:name="com.qf.day03buttondemo.SecondActivity">
   <!-- intent-filter:代表当前的activity是第一个启动的页面 -->
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>
 4、sp、dp、dip、dpi、pt、px等单位的区别是什么?
  <1>dpi
   dpi指像素密度。dots  per  inch ,即每英寸内像素点的个数。它不是表示长度的单位。在android中认为:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。随着技术的增长,实际dpi已经超出这个定义范围。
  <2>dip
   device  independent  pixels ,即与设备无关的像素。目前这个单位已经被dp所取代,而不建议使用dip.
  <3>dp
   与dip概念一样。不过dp已经取代了dip。在Android中用来表示非文字大小的尺寸。例如:外边距、内填充等。
  <4>sp
   scale  indepentdent  pixel ,即与缩放比例无关的像素。在android中常用来表示文字大小。
  <5>px 
   表示像素。因为同样是200px,但是在不同手机下显示的大小是不同的。
  <6>pt
   point磅。1磅=1/74英寸
  总结:dp是用来定义非文字的尺寸,sp用来定义文字大小。px只用于产生一条一像素的分割线时使用。
 5、一个适配器控件通过一个适配器展示数据的步骤。
  <1>查找控件
   private  Spinner  spinner;
   spinner = (Spinner) findViewById(R.id.spinner);
  <2>生成数据源
   private ArrayList<String> data=new ArrayList<String>();
   //初始化一个数据源链表
   private void initData(){
    数据内容
   }
   //调用数据源
   initData();
  <3>构造适配器对象
   private ArrayAdapter<String> adapter;
   adapter=new ArrayAdapter<String>(this,R.layout.item1);//两参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件
   adapter=new ArrayAdapter<String>(this,R.layout.item1,data);//三参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件
    第三个参数:数据源(可以是链表,也可以是数组)
   adapter =new ArrayAdapter<String>(this,R.layout.item2,R.id.textView,data);//四参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件(不是以TextView作为根节点)
    第三个参数:item2中要展示数据的TextView控件的id
    第四个参数:数据源
   adapter = new SimpleAdapter(this,data,R.layout.item,new String[]{"name","age","icon"},new int[]{R.id.name,R.id.age,R.id.icon})
    第一个参数:上下文对象
    第二个参数:数据源
    第三个参数:展示数据的布局文件
    第四个参数:map存储的key值
    第五个参数:要对应的value值的控件id
  <4>把数据和适配器产生联系(三参、四参的构造方法在构造适配器时就产生联系)
   adapter.add("data1");//添加一条数据
   adapter.addAll(data);//添加一个链表数据
  <5>把适配器和控件绑定(控件.setAdapter(适配器))
   spinner.setAdapter(adapter);
   //当数据原发生了变化时,及时通知适配器更新
   adapter.notifyDataSetChanged();
  <6>spinner的选中其中一项数据时候的监听器(OnItemSelectedListener)
   需要重写的方法是:
   @Override
   public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
    /*
      parent:指发生选择事件的适配器控件;
      view:指代spinner里面发生选择事件的item的布局视图
      position:发生选择事件的item的位置信息(从0开始一次增加)
      id:发生选择事件的item的行号id
    */
    //需要执行的逻辑代码,如下例:
    //把被点击的视图对象转变成TextView对象
    TextView TextView=(TextView) view;
    String string=textView.getText().toString();
    //获取对应的spinner的位置上的展示信息
    String string2=(String) parent.getItemAtPosition(position);
   }
   @Override
   public void onNothingSelected(AdapterView<?> parent) {
    //需要执行的逻辑代码
   }


6、为什么将android:layout_weight属性的值同时指定为1就会平分屏幕宽度呢?
 系统会先把LInearLayout下所有控件指定的layout_weight值相加,得到一个总值,然后每一个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。
7、MVC开发模型
 MVC(Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图模型,比如一批统计数据可以分别用柱状图、饼图来表示。一种视图模型也可以对于多种逻辑模型。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,与设计模式中的观察者模式是完全一样。
 MVC的好处:从用户的角度出发,用户可以根据自己的需求。选择自己合适的浏览数据的方式。比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以PDF的方式阅读。从开发者的角度,MVC把应用程序的逻辑层与界面开发是完全分开的,最大的好处是:界面设计人员可以直接参与界面开发,程序员就可以把精力放在逻辑层上。而不是像以前那样,设计人员把所有的材料交给开发人员,由开发人员来实现界面。在Eclipse工具中开发Android采用了更加简单的方法,设计人员在DroidDraw中设计界面,以XML方式保存,在Eclipse中直接打开就可以看到设计人员设计的界面。
 Android中界面部分也采用了当前比较流行的MVC框架,在Android中:
 1)视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然,如果你对Android了解的比较多了的话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JAvaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。
 2)控制层(Controller):Android的控制层的重任常落在了众多的Activity的肩上,这句话暗示了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Activity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
 3)模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在该层的,就是应用程序中的二进制数据。
 在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。在控制层上将数据按照视图模型的要求(也就是Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在LIstView中实现。