我们都知道listView可以实现纵向列表,可是它的拓展性并不好,而且无法实现横向列表。这里,我们学习一种新的View,它就是recyclerView。
先看一下效果图吧
它可以实现上下拖动以显示屏幕外的数据
因为android的recyclerView是新增的,所以它被封装到v7库中,要使用的话就必须导入对应的库,而这个库本身android已经提供,我们只需在android-Gradle Scripts-build.gradle(Module:app)-dependencies中添加
com.android.support:recyclerview-v7:26.1.0即可。
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.1.+'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
然后,在你需要显示的界面的xml中加入recyclerView。如图:
这里要注意的是,包名必须完整,否则无效。然后就是配置数据源,因为我的项目的业务需求是每个子项都有一个图片加一个textView组成。所以,我这里用到的是自定义的适配器。如何实现呢?首先,自定义一个子项的布局,命名为item
然后创建一个实例类,重写它的构造方法
最后构建适配器,将子布局加载到适配器,代码一看便知
最后,我们要做的就是将适配器放入recyclerView中
到了这一步我们的列表项就做完了。如果要改为横向布局,只需将第三行改为第四行即可。我们都知道,界面是与用户交互的,所以仅仅只能显示是不够的,我们还应该添加点击事件。与listview不同的是,recyclerView的点击事件是在适配器里添加的
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position=holder.getAdapterPosition();
ITEM item=mITEM.get(position);
switch (position)
case ://业务逻辑
break;
}
}
点击了某个子项,只要点击的位置在这个控件之内,都可以触发点击事件。
然后这里我们就得注意一个细节了,为了让用户知道他到底点击的是哪个选项,我们应该给点击事件添加特殊的响应机制。比如可以点击后文字变粗,颜色变红等等,但是这个有缺陷,比如第一次你点击了第一项,第二次你点击了第二项,那么第一项就需要还原,一旦你的子项特别多,处理起来就特别繁琐。所以我们就需要用到动画效果来实现。
这里,我们需要制作一个动画的配置文件,android默认的动画配置文件放在anim中,所以,在res文件夹下新建一个文件夹,命名为anim,然后根据我们的业务需求构建配置文件,命名为my_animation,我这里是文字从小变大的效果
,然后在项目中放置动画
final Animation animation= AnimationUtils.loadAnimation(view.getContext(),R.anim.my_animation); //点击后动画
需要使用的时候,调用startAnimation(animation)即可
最后,说一说关于recyclerView的一点细节,因为我们这里所处的位置是java类文件,在点击事件中,toast应该
Toast.makeText(view.getContext(),"本功能暂未开通",Toast.LENGTH_SHORT).show();
关于每个子项的边框如何实现呢?这个也需要自己来定义,在drawable目录下,创建一个xml,命名为view_border,
然后根据自己的需求设置
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff0000ff"/>
<stroke android:width="1dp" android:color="#000000" />
<gradient
android:startColor="#FFFFFF"
android:endColor="#FFFFFF"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="10dp" />
</shape>
最后,在子布局中将设置设为布局方式好了,关于recyclerView就暂时提到这里了,下期我们讲讲如何实现横向滑动切换屏幕