为什么我的Material Design风格列表点击时没有波纹扩散效果
来源:互联网 发布:知らないうちに百度云 编辑:程序博客网 时间:2024/06/06 07:28
这个问题是我在模仿Chessesquare项目的时候出现的,没想到这个还挺棘手的,主要是麻烦,有几个注意事项。
这个问题困扰的时间还挺长,有时候就打算不去管它了,但是在今天却居然莫名其妙的解决了,总结起来就是几个问题是跟很多地方的代码有关,有一处代码不一样,就没有这种效果。
其实这是一个关于RecyclerView
的问题,当我们以前使用ListView
的时候,系统默认会给设置一个点击时的按下效果,但是当我们使用RecyclerView
时,若不设置每一个条目的背景时,那么在点击时就没有任何效果。本文是通过获取系统提供的背景资源来设置点击时的显示效果。在5.0以上,会出现波纹扩散的效果,而在以前的Android版本,就只是单单的背景色改变,效果就是在上面的库中展示的样子。
上段里已经说明的这个问题的解决方式,那么下面就通过几个步骤来解决这个问题。不过解决不仅仅是通过改变背景资源,还有其他值得注意的地方。
1,首先要注意主题格式:
这里的话需要看一下关于5.0中的设计的颜色方案,以及style中的几个重要item:
<style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimaryDark">@color/purple_600</item> <item name="colorPrimary">@color/purple_400</item> <item name="colorAccent">@color/purple_A400</item> <item name="android:windowBackground">@color/purple_100</item></style>
此处注意下面这张图(该图中给出了主题颜色的主要属性名):
2,在加载layout
的时候,需要给布局设置相同主题的背景资源id:
View view = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.check_item, viewGroup, false);TypedValue typedValue = new TypedValue();getActivity().getTheme().resolveAttribute(R.attr.selectableItemBackground, typedValue, true);view.setBackgroundResource(typedValue.resourceId);
3,itemView
必须要设置clickable
为true
;
下面的就是整体的Adapter
的代码,如果与下面的代码一致,那么这个效果就是有的:
final RecyclerView view = (RecyclerView) inflater.inflate(R.layout.fragment_read,container, false);view.setLayoutManager(new LinearLayoutManager(getActivity()));view.setAdapter(new RecyclerView.Adapter() { class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.check_item_textview); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.check_item, viewGroup, false); TypedValue typedValue = new TypedValue(); getActivity().getTheme().resolveAttribute(R.attr.selectableItemBackground, typedValue, true); view.setBackgroundResource(typedValue.resourceId); return new ViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { ((ViewHolder)viewHolder).textView.setText("VIDEO"); viewHolder.itemView.setClickable(true); } @Override public int getItemCount() { return 50; }});return view;
另外,在使用RecyclerView
的时候,其Adapter
不建议使用匿名内部类,因为当你不这么做时,极有可能在后续的编码中获益。
2 0
- 为什么我的Material Design风格列表点击时没有波纹扩散效果
- android material design之点击波纹效果(ripple)
- design点击波纹效果
- 实现Material Design风格的点击水波荡漾效果
- Material Design Button波纹效果
- Android实现控件点击波纹扩散效果
- material design 之 ripple(波纹)效果
- android的Material Design点击涟漪效果
- RecycleView的使用--material design风格 列表显示
- 实现支付宝的咻一咻波纹扩散效果
- Android Material Design(6) CircularReveal圆形扩散动画的使用
- 自定义Drawable 实现波纹扩散效果
- Android设置点击的波纹效果
- android点击波纹效果
- 按钮点击效果(波纹)
- 创建Material Design风格的Android应用--创建列表和卡片
- 创建Material Design风格的Android应用--创建列表和卡片
- 创建Material Design风格的Android应用--创建列表和卡片
- Cornerstore分支合并
- 在angular的自定义回调中操作$scope
- RabbitMQ基础概念详细介绍
- 项目验收文档模板(二)
- java.util.Date_与_java.sql.Date互转_及_字符串转换为日期时间格式
- 为什么我的Material Design风格列表点击时没有波纹扩散效果
- Android7.0适配的一些小心得
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法
- 基于hadoop的网页元素抽取
- 17 - 03 - 30 图解HTTP(34)
- 计数问题
- spring集成quartz
- 清理Oracle 11g冗余用户和表空间
- Kubernetes1.6发布跟踪