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);
    }
  • 相关阅读:
    centos7 实时查看tomcat错误信息
    soapUI测试webservice(参数为xml格式的处理方式)
    四个好看的CSS样式表格
    ORM篇——有关NHibernate查询封装
    ORM篇——使用NHibernate配置对象实体的一些小问题
    c#操作XML文件的通用方法
    C#中正则表达式的使用
    C# Dictionary用法总结
    DLinq查询
    DataGrid通过DataSet保存为xml文件,并导入
  • 原文地址:https://www.cnblogs.com/lipeil/p/2540341.html
Copyright © 2011-2022 走看看