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);
    }
  • 相关阅读:
    Python——极限编程
    RPC是什么?科普一下
    缓存在高并发场景下的常见问题
    如何提高缓存命中率
    数据库性能优化的误区
    缓存在大型网站架构中的应用
    APP多版本共存,服务端如何兼容?
    水平分库分表的关键问题及解决思路
    分库分表的几种常见玩法及如何解决跨库查询等问题
    分布式系统事务一致性解决方案
  • 原文地址:https://www.cnblogs.com/lipeil/p/2540341.html
Copyright © 2011-2022 走看看