输入法 浏览器 黑屏 没有解决不了的问题,只是你的方法不对

来源:互联网 发布:经济数据日历 编辑:程序博客网 时间:2024/04/30 11:21

   1. 一个Activity构造的时候一定会构造一个Window(准确的说是一个PhoneWindow,PhoneWindow 继承自View)此Window有且只有一个。
   2. 这个Window有一个ViewRoot,它是一个逻辑性的根视图,实际上就是一个View类或者是一个ViewGruop类 。
      对于PhoneWindow 来说,它的 viewRoot 是 Decorview。
   3.那么,在这个ViewRoot的根视图上面就会添加一个一个的View,也就是执行addView()方法,来达到我们最终显示的效果。
      对于PhoneWindow 来说, addView() 被添加在 Decorview里。
   4.WindowManagerService接收消息,并且回调Activity函数,比如典型的onKeyDown()

                              View --------getViewRoot() 得到 根view   Decorview
                               继承
                             ViewGroup
                               继承          
                window       FrameLayout                      
                 继承           继承        
   activity   PhoneWindow   Decorview

   android:windowSoftInputMode="adjustResize"       The activity's main window is always resized to make room for the soft keyboard on screen.      当软键盘弹出时,window 会重新计算区域,为软键盘留出空间。 也就是说,Decorview 会将含有的原有布局 高度变小,留出底部一部分空间, 留出的空间底色应当为 Decorview 的底色。

   浏览器界面隐藏搜狗输入法时,出现黑屏现象 ---说明这时 window 的底色应为 黑色,可是在 style.xml 文件中 设置的window 背景色为 白色,
黑白转换 只在 一个新的tab页面被创建并展示出来时出现,说明在这个过程中 有地方改变了window 背景色。
   要改变window背景色 所有方法最终要走到 view.java中
    setBackgroundColor(color),setBackgroundResource(id), setBackgroundDrawable(drawable);
    而 setBackgroundColor(color),setBackgroundResource(id) 最终也是走的setBackgroundDrawable(drawable)。
    所以setBackgroundDrawable(drawable)在变色过程中一定会调用, 然后抓个异常查看调用流程,找到问题点即可。


   只注意到了 setBackgroundColor(color),setBackgroundResource(id)  ,没有深入挖掘出setBackgroundDrawable(drawable)



如何解决问题


  1 分析现象,确定问题范围, 列出可能原因,逐条排除。
  2 不太清楚的话,查询 关键字, 知道 大致范围, 直接去
  3 所有程序都是通过一个个管子链接在一起, 深入挖掘,看看能不能找到 必经的管道, 最终点,深入挖掘一下。