android之自定义控件一控件的呈现机制

来源:互联网 发布:淘宝48分店铺解封 编辑:程序博客网 时间:2024/04/28 21:04

       自定义控件是Android开发中非常常用的技术,是初级程序员向高级程序员进阶的必经之路。弄清楚Android原生控件是如何做出来的,自己动手去实现我们自定义的控件是非常重要的,今天为大家讲解的是自定义控件的入门的知识,首先要我们弄明白,控件的一些基本知识,和重新认识我们的控件。

      Android中控件分为两个部分,我们称之为2+1原则。一个是界面的呈现机制,一个是界面的事件机制。加一就是我们的ViewTree(界面的层级树)。第一种界面的呈现,我们分为两种方式。一个是XML布局我们通过inflate对象转化为类对象添加到我们的界面中。还有一种就是动态编码实现,动态布局,动态化控件。实际上我们的xml后期也是需要转化为类。(万物皆对象,对象都是类)。第二种Android的界面事件机制也分为两个知识点。一个是我们界面事件的分类,分为KeyEvent(按键事件),TouchEvent(手指触摸事件),和TrackballEvent(轨迹事件)。还有一个就是Android界面事件的触发及分发。下面附上一张ViewTree示意图。

     

  下面的代码片段演示了动态编码如何使用一个图像类构建一个ImageView,并将其添加到布局。

    

package com.example.cdy.customview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ViewGroup;import android.widget.Gallery;import android.widget.ImageView;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    //声明布局,看上边的层技术,一个view必须在一个viewGroup中。    LinearLayout linearLayout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //创建一个添加ImageView的 LinearLayout        linearLayout = new LinearLayout(this);        //实例化一个ImageView并定义其属性        ImageView i = new ImageView(this);        i.setImageResource(R.drawable.ershi);        //设置该属性为真可以在 ImageView 调整边界时保持图片的纵横比例。(译者注:需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。)        i.setAdjustViewBounds(true);        //Gallery(画廊)扩展了LayoutParams        i.setLayoutParams(new Gallery.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));        linearLayout.addView(i);        setContentView(linearLayout);    }}
  运行图如何,和xml布局是一样的。

   

 通过Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat。查看界面的布局。可以看到我们的界面并不像我们想象一样,实际上系统为我们生成了很多布局。

   

0 0
原创粉丝点击