美文网首页Android开发实战总结
Android 控件开发笔记(一)

Android 控件开发笔记(一)

作者: AKyS佐毅 | 来源:发表于2017-10-11 12:38 被阅读59次
    pic.png

    1、 什么是Activity

      Activity是一个应用程序组件,为应用程序提供一个可视化的界面,用户通过此界面与应用程序交互。
    

    2、 介绍一下Mainifest 、 MainActivity 、Layout

    • Mainifest.xml 应用程序的主配置文件

    • MainActivity 主界面

    • Layout 布局文件

    3、 Activity和Layout之间的关系

    Activity通过调用findViewById()函数,引用页面布局的控件,将Activity与控件联系起来,通常括号中的是(R.id.xxx),xxx为页面布局中定义的控件ID名。此时,我们还要解释一下R,R.java文件是由aapt工具根据应用中的资源文件来自动生成的,因此我们可以吧R.java看成Android应用的资源字典,aapt生成R.java文件的规则主要是两条:每类资源对应R类的一个内部类。比如,所有界面布局资源对应于layout内部类;每个具体的资源项对应于内部类的一个public static final int类型的Field,若界面布局中用到了ok,show两个标识符,则R.id类里就包含了这两个Field。随着我们不断地向Android项目中添加资源,R.java文件的内容也会越来越多。

    Activity和View之间的关系

    在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
    在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure --> onSizeChanged --> onLayout --> onDrawonMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onresume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次
    Activity执行onDestroy后,View执行onDetackedFromWindow

    View 的生命周期为:
    [改变可见性] --> 构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw -->
    onDetackedFromWindow

    4、什么时候在Layout中更改属性?什么时候在代码中修改属性

    Activity通过调用findViewById()函数,引用页面布局的控件并进行修改

    textView = (TextView)findViewById(R.id.MainTextView);
    textView.setTextColor(2);
    textView.setText(R.string.specialName);
    System.out.print("是否获取成功: " + textView+ "");
    

    5、 什么是View

     在屏幕方块中显示的内容
    

    6、 为View添加监听器

     监听器是一个对象,用于捕获View的状态,当View的状态发生更改时,可使用监听器对其进行相应的操作。同一个控件可以设置多种监听器,对不同状态进行捕获监听。
    
    操作步骤:
    
    /**
     * 1、布局文件中定义控件
     * 2、Activity中获取代表控件的对象 button = (Button)findViewById(R.id.button)
     * 3、定义一个类实现监听器接口,并重写其抽象方法  class ButtonListener implements View.OnClickListener  public void onClick
     */
    
    class ButtonListener implements View.OnClickListener{
            @Override
            public void onClick(View view) {
                //当控件被点击之后调用
                sum ++ ;
                System.out.print("当前点击次数为: " + sum);
            }
        }
        
     button = (Button)findViewById(R.id.button);
     buttonListener = new ButtonListener();
     button.setOnClickListener(buttonListener);
    

    Layout与ViewGroup之间的关系

    /**
     * Layout与ViewGroup之间的关系
     * - ViewGroup是一个容器,而这个容器是继承自View的
     * - ViewGroup是一个基类,并且是Layout和一些组件的基类
     * - Linear Layout 线性布局       Relative Layout 相对布局 开发中用的是最多的
     * - AdapterView(List View , Gird View) 已经封装好的布局视图
     */
    
    
    /**
     * match_parent 会填满父控件   fill_parent 在SDK2.0以下需要使用,普遍针对4.0以上的  warp_parent 包裹内容,由内容决定的  orientation排放的方向
     * - Gravity
     * - Android:gravity 用于设置该控件中内容相对于该控件的对齐方式
     * - Android:layout_gravity: 用于设置该控件相对于父控件的对齐方式
     * - Padding:用于设置该控件中内容相对于该控件的边距,即内边距
     * - margin: 用于设置该控件相对于其他控件的边距,即外边距
     * - weight: layout_weight的值用于在线性布局中指定父控件剩余空间的分配比例。
     * - 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空间。若赋一个高于零的值,则将父视 图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight 值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布 局的layout_weight值中所占的比率而定。 
     * 举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素. 该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。 如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分  在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2, 则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。
     */
    
    
      /**
     * - Andorid中像素单位  px dp sp
     * - px:像素,全称图像元素,分辨率的尺寸单位
     * - dpi:(dot per inch) 一般是指每英寸的像素,类似于密度,即每英寸图片上的像素点数量,用来表示图片的清晰度
     * - dp:dip(Device Independent pixels),设备独立像素
     * - sp:距离单位 -可缩放像素,一般用于指定字体大小。-当用户修改手机系统字体时,应用程序中的字体大小会随之变化。
     */
    
    Screenshot_1507690638-w540Screenshot_1507690638-w540

    布局代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#6B8E23"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="东方网络金融"
                android:layout_marginRight="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="信息服务部" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#ffb6c1"
            android:layout_weight="1"
            android:orientation="vertical"
            android:gravity="center">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="东方网络金融"
                android:layout_marginBottom="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="信息服务部" />
            
        </LinearLayout>
    
    </LinearLayout>
    

    如何定义一个Activity

    • 创建一个Activity子类

    • 重写Activity中的onCreate方法

    • 在AndroidManifest.xml中对Activity进行注册

    启动一个Activity

    • 创建Intent意图对象

    • 调用setClass 设置要启动哪个Activity

    • 调用startActivity进行跳转

    private Button button;
    private  int sum = 0;
    private ButtonListener buttonListener;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //为当前的Activity设置当前显示的内容
        setContentView(R.layout.activity_main);
    
        //为button添加监听器
        button = (Button)findViewById(R.id.button);
        buttonListener = new ButtonListener();
        button.setOnClickListener(buttonListener);
    }
    
    class ButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            //当控件被点击之后调用
            sum++ ;
            System.out.print("当前点击次数为:" + sum);
    
            Intent intent = new Intent();
            intent.setClass(MainActivity.this,OtherActivity.class);
            startActivity(intent);
        }
    }
    

    基础控件使用方法

    TextView适用条件

    • 当文本内容为电话、邮箱或者特定格式时
    • 当文本内容超出控件宽度时
    • 当需要更改文本字体类型和风格时

    color:

    1、导入color.xml文件至values文件夹下。
    2、xml布局文件中,通过@color/对应颜色名称

    drawable:

    1、导入图片资源(.jpg/png)至drawable文件夹下(考虑适配的话,需要多张图片。不考虑的话,一张足矣)
    2、xml布局文件中,通过@drawable/图片名称

    string:

    1、values文件夹下的strings.xml文件下,定义键值对。key:内容名 values:对应文字内容
    2、xml布局文件中,通过@string/内容名(国际化、使xml布局文件更加整洁)

    sp/dp:

    实际开发中,有时为了美观、一致性 会使用dp来作为文字大小的单位。官方推荐使用sp。

    autoLink:

    设置特殊文字格式(web/phone/email/..)

    ellipsize:

    start/end/middle(一定要是singleline) 为显示不下的内容添加省略号

    跑马灯:

    • ellipsize:marquee
    • singeline
    • textIsSelectable
    • marqueeRepeatLimit:forever..
    • typeface:设置各种文字类型
    • textSytle:设置文字风格
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/textview01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView基本属性解析" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/darkorange"
            android:text="带有颜色的TextView" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="@drawable/inter"
            android:text="带有图片背景的TextView" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/more" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="设置文字大小、颜色"
            android:textColor="@color/royalblue"
            android:textSize="15sp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="web"
            android:text="官网地址:http://www.dfjr888.com" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="email"
            android:text="邮箱:xxxxxxxxx@163.com" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="phone"
            android:text="电话:1234567980" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="map"
            android:text="经纬度暂时无法使用,google地图已经退出啦。期待回归!" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableBottom="@drawable/ic_launcher"
            android:drawableLeft="@drawable/ic_launcher"
            android:drawableRight="@drawable/ic_launcher"
            android:drawableTop="@drawable/ic_launcher"
            android:gravity="center"
            android:text="在我的周围添加图片吧!" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/magenta"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:text="@string/more"
            android:textColor="@color/wheat"
            android:textIsSelectable="true" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="设置字体风格"
            android:textStyle="bold|italic" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="设置文字字体类型"
            android:typeface="monospace" />
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#6B8E23"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="东方网络金融"
                android:layout_marginRight="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="信息服务部" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#ffb6c1"
            android:layout_weight="1"
            android:orientation="vertical"
            android:gravity="center">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="东方网络金融"
                android:layout_marginBottom="10dp"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="信息服务部" />
            
        </LinearLayout>
    
    </LinearLayout>
    
    Screenshot_1507710397Screenshot_1507710397

    相关文章

      网友评论

        本文标题:Android 控件开发笔记(一)

        本文链接:https://www.haomeiwen.com/subject/vilgextx.html