1.ViewPage + fragement+WebView 点击失效

报错内容:

Should not happen: no rect-based-test nodes found


前提:

浏览器首页采用 ViewPage + fragement+WebView形式实现,进入首页以后当前page内容可以被选中,当滑到viewpage下一页发现page内容无法被选中,打Log发现错误提示如上所示。


分析:

在当前页webview内容无法被选中,切换一次横竖屏就可以被选中了,但是滑到下一页后的你区域就无法被选中了。

viewpage在切换页面的时候,fragment中的webview没有监测到自己处于可见状态。因此,当你发现webview应该处于visible状态的时候就让它动一下,进而告知webkit来准备响应。


处理方法:

首先自定义一个webview的子类

方法一

@Overridepublic boolean onTouchEvent(MotionEvent event) {    if (event.getAction() == MotionEvent.ACTION_DOWN){        int temp_ScrollY = getScrollY();        scrollTo(getScrollX(), getScrollY() + 1);        scrollTo(getScrollX(), temp_ScrollY);    }    return super.onTouchEvent(event);}



方法二

webview.onScrollChanged(webview.getScrollX(), webview.getScrollY());



参考:

http://stackoverflow.com/questions/12090899/android-webview-jellybean-should-not-happen-no-rect-based-test-nodes-found



2 Tab页叠加效果

在pad上浏览器的体验与手机上面不太一样,pada上与桌面电脑上面比较像,比如浏览器会同时存在多个tab页,如果搞的好看还会有叠加效果。如图所示:


Android源码对于tab布局是这样设计的:首先定义一个线性布局TabLayoutextends LinearLayout,TabLayout作为父容器。每一个Tab对应一个线性布局TabView extends LinearLayout,此时可以根据需要向父容器里面增删TabView来实现添加删除一个tab页的功能。如果希望实现上图tab之间的叠加效果,那么就需要重写TabLayout这个view 的layout函数来制定子view的布局方式
 //重写TabLayout里面子tab的布局方式,实现叠加效果。叠加成都mTabOverlap可以自己定义大小 protected void onLayout(boolean changed, int left, int top, int right, int bottom) {            super.onLayout(changed, left, top, right, bottom);            if (getChildCount() > 1) {                //计算第二个view布局位置的左边坐标,如果需要叠加效果,就得减去叠加范围mTabOverlap的大小                int nextLeft = getChildAt(0).getRight() - mTabOverlap;                //i=1从第二个view开始实现叠加效果,叠加到view1上面                for (int i = 1; i < getChildCount(); i++) {                    View tab = getChildAt(i);                    //每一个tab的宽度                    int w = tab.getRight() - tab.getLeft();                    tab.layout(nextLeft, tab.getTop(), nextLeft + w, tab.getBottom());                    //计算下一个view的左侧坐标                    nextLeft += w - mTabOverlap;                }            }        }



这样就可以实现tab之间的叠加效果了
仔细观察可以看到每个浏览器的叠加效果还是有差异的,比如上面的截图是chrome浏览器,很明显它是左边的压住右边的,选中tab会压住左右两边的。有的浏览器是右边的tab压住左边的tab,选中的tab压住左右两边的。不管怎么叠加,原理是一样的,这些效果主要取决于TabLayout里面子view的绘制顺序,谁后绘制谁就压住先绘制的。具体实现是在TabLayout里面的getChildDrawingOrder方法。这个方法默认实现是根据父View添加子View时候的顺序来绘制子View,如果想修改子View的绘制顺序就需要重写这个方法的实现。
 protected int getChildDrawingOrder(int count, int i) {            int next = -1;            //最后绘制选中的tab,选中的tab高亮压住两边的tab            if ((i == (count - 1)) && (mSelected >= 0) && (mSelected < count)) {                next = mSelected;             } else {                //左边的tab压住右边的tab                /*next = count - i - 1;                if (next <= mSelected && next > 0) {                    next--;                   }*/                //右边的tab压住左边的tab                if(i>=mSelected){                  next = i+1;                }else{                  next = i;                }             }              return next;        }


3. 各种弹出框效果的实现:ListPopupWindow+PopupWindow+PopupMenu这三者的区别


先看下面这篇,这要是讲ListPopupWindow http://blog.csdn.net/rambomatrix/article/details/23525379

未完待续

更多相关文章

  1. android项目解刨之时间轴
  2. Android(安卓)EditText.setError() - 会弹出一个popupwindow,效果
  3. Android(安卓)开源框架ActionBarSherlock 和 ViewPager 仿网易新
  4. Android:阴影效果的另一种实现方法:layer-list
  5. [Android]ViewSwitcher使用范例
  6. Android(安卓)-- RecyclerView实现顶部吸附效果
  7. Android(安卓)解屏幕锁与点亮屏幕(来电时效果)
  8. 弹出对话框--------android Toast 五种情形(无按钮)
  9. github前100名的android开源库

随机推荐

  1. Android预优化那些事
  2. 【Android(安卓)文件管理】分区存储 ( 修
  3. Unity和Android交互笔记——接入Android(
  4. Android一日游
  5. Android(安卓)控件布局常用属性
  6. Android(安卓)鲜为人知的 8 个小秘密
  7. [Android]Android部分基础学习路线图
  8. android企业级商城源码、360°全景图VR源
  9. Android编译系统(四):Android(安卓)编译
  10. android:versionCode和android:versionNa