setCompoundDrawablesWithIntrinsicBounds的问题

最近参考此文章 http://www.cnblogs.com/over140/archive/2011/04/25/2026812.html . 做了一个edittext的一个控件.发现了一个问题.刚进入输入数据,右侧图标出现


点击button,进入另一个Activity后返回.右侧图标不见了.

此问题在2.3.6的机器上发现了.同样的apk装到4.0.4的版本上发现没问题.一切ok.

========================================================================

原因如下:

当前Activity进入另外的Activity的时候会自动执行onSaveInstanceState来保存当前的Activity的一些状态信息.如上面edittext中的文字.

edittext继承textview.在textview中找到onSaveInstanceState函数.分别比较2.3.6和4.0.4的该函数发现了一处不一样的地方

 public Parcelable onSaveInstanceState(){
  .........
          
  	 setError(null); //此函数在2.3.6中有,4.0.4版本中没有.
   
          ss.error = mError;
   
          return ss;
  .........
  }
public void setError(CharSequence error) {
          if (error == null) {
              setError(null, null); //2.3.6会执行此函数
          } else {
              Drawable dr = getContext().getResources().
                  getDrawable(com.android.internal.R.drawable.
                              indicator_input_error);
  
              dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
              setError(error, dr);
          }
      }
 
public void setError(CharSequence error, Drawable icon) {
         error = TextUtils.stringOrSpannedString(error);
 
         mError = error;
         mErrorWasChanged = true;
         final Drawables dr = mDrawables;
         //由于icon为null.所以不管哪个条件.right的icon都被重置为null.
         if (dr != null) {
             setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop,
                                  icon, dr.mDrawableBottom);
         } else {
             setCompoundDrawables(null, null, icon, null);
         }
 
         if (error == null) {
             if (mPopup != null) {
                 if (mPopup.isShowing()) {
                     mPopup.dismiss();
                 }
 
                 mPopup = null;
             }
         } else {
             if (isFocused()) {
                 showError();
             }
         }
     }

所以会发现在点击another时,仔细观察会发现:右侧图标会先消失.再进入另一个Activity.并且返回的时候没有此图标了==========================================================================================

解决方法:很简单.在Activity的onResume的函数中.加入如下代码,判断edittext是否为空.然后进行重新设置

if(search_et1 != null)
{
    if(TextUtils.isEmpty(search_et1.getText().toString()))
        search_et1.setCompoundDrawablesWithIntrinsicBounds(null, null, 
             getResources().getDrawable(R.drawable.search), null);
    else
        search_et1.setCompoundDrawablesWithIntrinsicBounds(null, null,    
               getResources().getDrawable(R.drawable.search_close), null);
}

 
 
 

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值