zoukankan      html  css  js  c++  java
  • 利用反射修改TextView 中的mPopup视图

          public void reflect(EditText errorEdit)
        {
            try
            {
                   /**获取TextView类中 mPopup的字段*/
                Field popupField = TextView.class.getDeclaredField("mPopup");
                popupField.setAccessible(true);
                /**获取字段 在 errorEdit对象中的值 , 即mPopup对象*/
                Object popupObject = popupField.get(errorEdit);            
                Class popupClass = null;
                
                /**获取 mPopup类*/
                Class[] innerClasses = TextView.class.getDeclaredClasses();
                for(Class innerClass :innerClasses)
                {
                    String name = innerClass.getName();
                    System.out.println("-----innerClass---"+name);
                    if(name.equals("android.widget.TextView$ErrorPopup"))
                    {
                        popupClass = innerClass;
                    }
                }
                
                if(popupClass != null)
                {
                       /**在mPopup类 中获取 mView 对象的字段*/
                    Field mViewField = popupClass.getDeclaredField("mView");
                    mViewField.setAccessible(true);
                    /**在mPopup对象 中获取 mView 值(即mView对象)*/
                    TextView mView = (TextView)mViewField.get(popupObject);
                    
                    /**重新设置mView的背景图*/
                    mView.setBackgroundResource(R.drawable.pop_text_bg);
                }
            }
            catch (Exception e)
            {            
                e.printStackTrace();
            }        
        }

    需要注意的是我们不能在onCreate里面直接调用以上方法,因为那时mPopup View还没有初始化
    我们可以在onClick中 触发该修改
    如:

    public void onClick(View view)
    {
    	EditText errorEdit = (EditText) findViewById(R.id.error_edit);
    	errorEdit.setError("the text is null");
    	reflect(errorEdit);				
    }

    或者
    public void onWindowFocusChanged(boolean hasFocus)
    {
            // TODO Auto-generated method stub
            super.onWindowFocusChanged(hasFocus);
    }
  • 相关阅读:
    Jackson Annotation Examples
    Java 8 Stream API说明
    Spring Enable* 注解
    1568: [JSOI2008]Blue Mary开公司
    BZOJ1558: [JSOI2009]等差数列
    BZOJ3155: Preprefix sum
    BZOJ4552 [Tjoi2016&Heoi2016]排序
    BZOJ4653 [Noi2016]区间
    BZOJ4487 [Jsoi2015]染色问题
    Luogu2664 树上游戏
  • 原文地址:https://www.cnblogs.com/lipeil/p/2540341.html
Copyright © 2011-2022 走看看