本篇文章主要是记录一下高级控件ListView和CardView的使用方式和注意事项,虽然目前都已经用RecyclerView替代了ListView但是了解其中的原理和优化还是有必要的,关于ListView的原理和真正意义上的优化在后面会专门写一片文章来讲述,本篇只谈其具体使用与必须优化的方式。至于CardView其实用的还是比较多的,可以看到我的小Demo实现的效果还是很不错!最后涉及到了一些Android屏幕适配问题的解决方案。
ListView
Displays a vertically-scrollable collection of views, where each view is positioned immediatelybelow the previous view in the list. For a more modern, flexible, and performant approach to displaying lists, use android.support.v7.widget.RecyclerView.
ListView的基本使用
ListView使用步骤如下:
1、在Layout中创建ListView
2、创建每一行的layout
3、创建每一行的数据
4、用adapter将数据填充到每一行的视图中
条目布局文件 item_app_list.xml
1 |
|
AppListActivity.java
1 | public class AppListActivity extends AppCompatActivity { |
点击事件与长按事件
1 | public class AppListActivity extends AppCompatActivity { |
设置HeaderView与FooterView
header_app_list.xml
1 |
|
AppListActivity.java(其实只需要在setAdapter之前做一个addHeaderView的操作即可)
1 | public class AppListActivity extends AppCompatActivity { |
ListView的优化
真正意义上的优化: http://www.xuanyusong.com/archives/1252
1 | public class AppListActivity extends AppCompatActivity { |
条目布局分类加载
item_left_chat.xml
1 |
|
item_right_chat.xml
1 |
|
现在拥有item_left_chat.xml和item_right_chat.xml两个布局,所以只需要做好分类布局加载就好了:
1 | public class MainActivity extends AppCompatActivity { |
CardView
CardView是用于实现卡片式布局效果的重要控件,实际上也是一个FrameLayout,只是额外提供了圆角和阴影,看上去有立体效果。
CardView是什么?
- Android5.0之后新增
- com.android.support:cardview-v7:26.1.0独立引入
- 继承自FrameLayout,方便作为其他控件容器,添加3D阴影和圆角效果
CardView常用属性
- cardBackgroundColor设置背景色
- cardCornerRadius设置圆角半径
- contentPadding 设置内部padding
- cardElevation设置阴影大小
- cardUseCompatPadding 默认为false,用于5.0及以上,true则添加额外的padding绘制阴影
- cardPreventCornerOverlap 默认为true,用于5.0以下,添加额外的padding,防止内容和圆角重叠
CardView的常用属性
引入CardView的依赖
1 | implementation 'androidx.cardview:cardview:1.0.0' |
一个VardView的小Demo:
1 |
|
其实可以看到CardView还真的是有种卡片效果的。常用的属性如下:
属性 | 作用 |
---|---|
card_view:cardElevation | 阴影的大小 |
card_view:cardMaxElevation | 阴影最大高度 |
card_view:cardBackgroundColor | 卡片的背景色 |
card_view:cardCornerRadius | 卡片的圆角大小 |
card_view:contentPadding | 卡片内容于边距的间隔 |
card_view:contentPaddingBottom | 卡片内容与底部的边距 |
card_view:contentPaddingTop | 卡片内容与顶部的边距 |
card_view:contentPaddingLeft | 卡片内容与左边的边距 |
card_view:contentPaddingRight | 卡片内容与右边的边距 |
card_view:contentPaddingStart | 卡片内容于边距的间隔起始 |
card_view:contentPaddingEnd | 卡片内容于边距的间隔终止 |
card_view:cardUseCompatPadding | 设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式 |
card_view:cardPreventCornerOverlap | 在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠 |
CardView使用示例
先把展示的图片发放在drawable下的xxhdpi下:分别是img01-img05。
item_msg.xml ,这是ListView的条目布局:
1 |
|
main_activity.xml
1 |
|
MainActivity.java
1 | public class MainActivity extends AppCompatActivity { |
看看最终的展示效果:
这里用到了lombok这款插件,那就顺便说一下lombok在Android开发中如何使用吧。
使用tools工具预览
1 | <!-- 引入tools命令空间 --> |
使用tools工具可以进行控件效果预览,如果直接写了android:text=XXX,那么很可能在数据无法正确加载的情况下显示出我们定义的android:text属性,所以无论是ImageView还是TextView等需要添加数据才可以预览的情况都可以使用tools这个命名空间。
Lombok在Android中的使用
引入lombok的依赖:
1 | // 这是CardView的依赖 |
安装Lombok的插件:
安装好插件后重启AndroidStudio即可使用Lombok插件。
最后别忘了在moudle或者project底下新建一个lombok.config:
1 | lombok.anyConstructor.suppressConstructorProperties=true |
然后开始愉快的写代码吧 ~
编译时编码错误解决方案
1 | android { |
Android屏幕适配
这个专门放置一篇博客!
- 本文作者: Tim
- 本文链接: https://zouchanglin.cn/2020/11/19/58995.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明出处!