Android第三十五天

一、怎样在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){
   //在这里写当按钮被点击以后要作的任务
   ......
  }
 总结:若是有多个按钮绑定同一个监听器,除了匿名内部类的写法,其余三种方法均可以。
二、怎么实现多个按钮绑定同一个监听器?
 <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);
三、怎么建立一个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>
四、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只用于产生一条一像素的分割线时使用。
五、一个适配器控件经过一个适配器展现数据的步骤。
 <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) {
   //须要执行的逻辑代码
  }
六、为何将android:layout_weight属性的值同时指定为1就会平分屏幕宽度呢?
 系统会先把LInearLayout下全部控件指定的layout_weight值相加,获得一个总值,而后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。
七、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中实现。 java

相关文章
相关标签/搜索