解决继承SwitchPreference后丢失动画的问题
来源:互联网 发布:淘宝怎样隐藏订单 编辑:程序博客网 时间:2024/05/16 05:02
大概二年前,曾经遇到一个问题,使用SwitchPreference的子类时,Switch的点击动画居然没了,原本点击后SwitchPreference有一个过渡的动画,使用子类就变成了很生硬的直接选中的状态,但是奇怪的是子类没有任何修改!!当时还记得因为这个原因被迫选择了其他的方案。。
结果现在在修改一个开源项目的时候又遇到了,于是阅读了SwitchPreference及其父类的源码,居然发现了解决办法。
首先SwitchPreference是一个系统组件
SwitchPrerenece -> TwoStatePreference -> Preference
SwitchPrerenece 和 TwoStatePreference 代码较少,大部分代码都集中在Preference里
在Preference的构造方法的最后的地方有这么一段代码
if (!getClass().getName().startsWith("android.preference") && !getClass().getName().startsWith("com.android")) { // For non-framework subclasses, assume the worst and don't cache views. mCanRecycleLayout = false; }
居然判断了类的包名,我们在继承SwitchPreference的时候除了包名没有作任何的修改,所以我就尝试把SwitchPreference的子类放在android.preference包下
package android.preference;import android.content.Context;import android.util.AttributeSet;import sp.phone.bean.PreferenceConstant;public class SwitchCompatPreference extends SwitchPreference { public SwitchCompatPreference(Context context, AttributeSet attrs) { super(context, attrs); } public SwitchCompatPreference(Context context) { super(context); }}
居然奇迹般的出现了动画效果, 搜索了mCanRecycleLayout在Preference中使用的地方
public void setLayoutResource(@LayoutRes int layoutResId) { if (layoutResId != mLayoutResId) { // Layout changed mCanRecycleLayout = false; } mLayoutResId = layoutResId; } public void setWidgetLayoutResource(@LayoutRes int widgetLayoutResId) { if (widgetLayoutResId != mWidgetLayoutResId) { // Layout changed mCanRecycleLayout = false; } mWidgetLayoutResId = widgetLayoutResId; }boolean canRecycleLayout() { return mCanRecycleLayout; }
也就是说当我们继承Preference或者在java代码里设置了layout或者WidgetLayout的时候,这个变量就被置为false,就会丢失动画。
阅读全文
0 0
- 解决继承SwitchPreference后丢失动画的问题
- SwitchPreference遇到的坑及解决
- 自定义SwitchPreference时遇到的问题
- 解决导出Excel后0丢失的问题
- 解决资源管理器重启后,托盘图标丢失的问题
- 解决 越狱后ios 密码丢失的问题
- 解决透视变换后图片信息丢失的问题
- 解决安装Liunx后Windows引导丢失的问题
- setting中switchpreference问题
- TranslateAnimation动画结束后的位置问题(已解决)
- 怎样解决不同页面来回切换后,原来数据又不丢失的问题
- VS 2005 安装Asp.net Ajax扩展后项目模板丢失问题的解决
- [web相关]解决MSVCR100.dll丢失的问题 (WAMP安装后不能启动)
- ASP.NET MVC1 升级到 MVC2后,Session 丢失问题的解决
- 解决ubuntu 14.04删除ibus后导致系统设置丢失项目,注销关机不正常的问题
- 解决润乾报表导出Excel后0丢失的问题
- 安装wamp,提示丢失msvcr110.dll文件 ,安装好后出现 403 forbidden问题的解决
- 解决MVC中使用BundleConfig.RegisterBundles引用Css及js文件发布后丢失的问题
- 2017年5月31日网站日志调研
- 安装beautifulsoup4 时出现 ImportError: cannot import name 'beautifulsoup'
- bzoj 1477 青蛙的约会 拓展欧几里得(详细解析)
- 用户代理与IP代理爬取糗事百科
- [bzoj4928][SDOI省队集训2017]dierti
- 解决继承SwitchPreference后丢失动画的问题
- 【编程题】调整红白蓝三色
- 考研数学笔记 61~65
- 流媒体/流媒体文件格式详解
- commons-beanutils的小例子
- NumPy 基础入门
- 100层高的大楼,丢玻璃球的问题
- memcached初学总结
- NullPointException 利器 Kotlin 可选型