custom preference item 点击后高度扩充问题的解决方法

来源:互联网 发布:三千年未有之变局知乎 编辑:程序博客网 时间:2024/06/05 06:39


       上文中提到custom preference 的实现,基本没什么问题,但在项目开发中,当点击preferenceitem的时候,当前的item的高度总会自动扩充,这样造成的后果开始不觉得什么,但当功能实现得已经趋紧完美的时候,就会-降低用户的体验效果,招致反感。

       首先:想到的是RelativeLayout 布局的问题,但经过验证,使用linerlayout也同样会出现这个现象,so 排除。

       其次:找到相关的xml布局界面,通过验证发现checkBox选中后会出现这个现象,通过方法验证属于item自动扩充。

       最后:查看android.preference的源代码终于找到了答案,直接上代码。

       

                  

    /**     * Sets the summary for this Preference with a CharSequence.      *      * @param summary The summary for the preference.     */    public void setSummary(CharSequence summary) {        if (summary == null && mSummary != null || summary != null && !summary.equals(mSummary)) {            mSummary = summary;            notifyChanged();        }    }

       此处总是执行父类的setSummary,summary保持不变,而子类未必需要父类这个summary,在preferenceChangeListener中,setSummary就会导致高度扩充。

      解决方法:覆盖父类的setSummary,同时在onBindVie中不指定setSummary(value)。

      @Override
public void  setSummary(CharSequence summary)
{
        if (summary == null && this.summary != null || summary != null && !summary.equals(this.summary)) {
        this.summary  = summary;
    super.setSummary(null);
    notifyChanged();
        }
}