Android从入门到放弃——二、View(1、view的点击事件和背景)

今天我们要将的主题——View

什么是View

之前我们说Activity就是门面,那么View就是我们家里的家装了。我们所有能够看到的控件都是继承至View。Android提供了大量丰富的控件。

创建View

想要创建View的方法有2种,一种是在布局文件中间通过xml的方式,一种是在代码里面直接创建View对象。

下面我们先来看看第一种




    

这个时候的界面是看不到任何东西的,因为我们创建的View没有任何内容。

View的样式

基本的View能够设置的样式有大小,颜色。上面的代码中layout_width设置的就是View的宽,layout_height设置的高。颜色由android:background设置。

这样我们就给View设置了一个基本的样式,background给的是一个颜色值。

Android从入门到放弃——二、View(1、view的点击事件和背景)_第1张图片

左上角蓝色的正方形就是刚刚添加的View。

View的交互

与View的交互是用户和我们的应用发生关系最主要的操作。我们一般常见的操作就是点击、长按、滑动、拖动这些。普通的View系统已经给我们提供了点击和长按的触发事件。

点击事件:这是最常用的一种,即用户一根手指按下并且快速的弹起来的操作。那么我们如何监听到这个操作呢? 系统提供的2种方法,同样一种是在xml布局文件中,一种是在代码里面设置。

1、先看在xml中,这种方法需要我们现在代码中添加一个方法,并且这个方法接受要个View的参数。

fun onViewClick(view: View) {
        Log.d("AActivity", "ZLog onViewClick :[view]$view")
    }

然后在布局文件中给需要设置的View添加一个属性:onClick,传入我们设置的方法名称:

这样我们就可以在用户点击蓝色View的时候坚挺到点击事件的发生了。

2、在代码中设置

想要在代码中直接设置的话我们先要给View添加一个ID,这样才能在代码中获取到当前需要设置事件监听器的View。

View提供了一个setOnClickListener的方法,参数为OnClickLisntener接口,该接口中只有一个onClick方法。

public void setOnClickListener(@Nullable OnClickListener l)
public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }

所以我们在代码中直接调用View的setOnClickListener方法即可。

acMainView.setOnClickListener {
            Log.d("AActivity", "ZLog onClick :[view]$it")
        }

 这里是kotlin的写法,Java的可以自己试一下。

这两种方法都可以设置监听事件。但两个还是有区别的,在xml中设置比较死板了,适合一些固定的场景。代码里面就可以动态的去设置了,根据我们的业务逻辑来设置。

长按事件:长按就是用户手指按下去之后没有马上弹起来所触发的,设置监听的方法就只有在代码中设置了。设置的方法和设置点击事件类似,系统提供了setOnLongClickListener方法,这里就不做介绍了,大家可以试试看。

再说View样式

 看到这里,有人就会想要一个问题,既然View可以设置点击事件,那我在点击的时候想要改变一下背景颜色呢?在网页上很常见的这种按钮之类的。这里就要来重新讲一下我们刚刚设置样式的背景:android:background属性了。

刚刚我们只是设置了一个颜色,想要实现点击的时候颜色不一样我们就需要自己来定义一个特殊的背景了。android:background接收的内容其实是很丰富的,可以是刚刚设置的单个颜色,可以是图片,也可以是自定义的一个drawable。下面我们就来讲一下drawable。

我们在res/drawable下面新建一个drawable文件

Android从入门到放弃——二、View(1、view的点击事件和背景)_第2张图片



    

看到文件创建后xml里面有一个默认的selector标签,它就代码的一个选择器,选择什么呢?就是选择view在不同状态用什么资源。下面我们来简单写一个背景,只是在不同状态来设置不同颜色




    
    

里面每个状态都是一个item,状态用android:state_*来表示,提供的状态有很多种,对于的资源用android:drawable来表示。

这里定义了一个按下的样式,意思是按下(state_pressed="true") ,就使用前面drawable定义的颜色值。

说下面一个没有定义任何状态之前要先讲一下系统来解析这个文件定义的状态的时候是有先后顺序的,如果前面设置的状态满足了就不会再去找后面的了。

再来说最后一个item,为什么我这里不定义任何状态?意思就是如果前面的所有状态都没有匹配到的时候就用这个。这里设置了一个黑色,所以View在没有被点击的时候就是黑色的,点了之后就是蓝色(colorPrimaryDark)。

Android从入门到放弃——二、View(1、view的点击事件和背景)_第3张图片Android从入门到放弃——二、View(1、view的点击事件和背景)_第4张图片

上图左边是没有任何操作的时候,右边是按下的时候。

我们再来验证一下说它有顺序的情况。修改一个drawable文件

    
    
    

这里我们设置的预期是如果view没有被使能(就是不能做任何操作 android:state_enable="false")颜色为红色,按下为绿色,正常为蓝色,我们借助最新的android studio的预览工具可以很方便的查看各种状态下的样式。

Android从入门到放弃——二、View(1、view的点击事件和背景)_第5张图片

大家可以看到框出来的那一行,这里看到的就是我们可以设置的状态,选中即代表使能当前的状态,我们这里选中的Enable,即使能了View,pressed没有选中,即state_pressed为false,这里不满足,那么前面2中状态都不满足所以显示蓝色。

Android从入门到放弃——二、View(1、view的点击事件和背景)_第6张图片

这里我们取消了enable的选项,state_enable="false"就满足了,同时我们选中了pressed,那么state_pressed="true"也满足了,但是遵循我们刚刚说的顺序原则,这里先匹配的enable=false,所以显示红色。

背景我们先讲到这里,下一遍我们继续讲View的背景相关内容。

你可能感兴趣的:(Android从入门到放弃)