精华内容
下载资源
问答
  • 2017-08-14 13:25:02
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="@color/white">
       <android.support.v4.widget.NestedScrollView
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          app:layout_behavior="@string/appbar_scrolling_view_behavior"
          android:fitsSystemWindows="true">
       <WebView
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/webiew"
          android:focusable="true"
          android:focusableInTouchMode="true"
    />
       </android.support.v4.widget.NestedScrollView>
       <android.support.design.widget.AppBarLayout
          android:layout_width="match_parent"
          android:layout_height="42dp"
          android:fitsSystemWindows="true"
          android:background="@color/white">
          <android.support.v7.widget.Toolbar
             android:id="@+id/web3_toolbar"
             android:layout_height="42dp"
             android:layout_width="match_parent"
             android:background="#00000000"
             app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
             app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
             app:layout_scrollFlags="scroll|enterAlways"/>
       </android.support.design.widget.AppBarLayout>
       <ProgressBar
          style="?android:attr/progressBarStyleHorizontal"
          android:id="@+id/myProgressBar"
          android:layout_width="match_parent"
          android:layout_height="2dip"
          android:progressDrawable="@drawable/layer"
          />
    </android.support.design.widget.CoordinatorLayout>
    
    
    更多相关内容
  • 1. 前言在我们浏览一个滑动视图列表的时候会动态的将ActionBar(Toolbar)隐藏(向下滑动显示,向上滑动隐藏),以留下更多的空间来显示内容。内容非常简单,先看看效果图:2. 布局文件xmlns:android=...

    1. 前言

    在我们浏览一个滑动视图列表的时候会动态的将ActionBar(Toolbar)隐藏(向下滑动显示,向上滑动隐藏),以留下更多的空间来显示内容。内容非常简单,先看看效果图:

    FgkDl0_1g5RJRNyh3oJalEBOxM7w

    2. 布局文件

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical">

    android:id="@+id/toolbar"

    android:layout_width="match_parent"

    android:layout_height="?attr/actionBarSize"

    android:background="@color/colorPrimary"

    app:layout_scrollFlags="scroll|enterAlways"

    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

    app:titleTextColor="@color/white"/>

    android:id="@+id/progress_bar"

    style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"

    android:layout_width="match_parent"

    android:layout_height="2dp"

    android:layout_gravity="center"/>

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    android:id="@+id/web_view"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

    Toolbar 的 app:layout_scrollFlags=”scroll|enterAlways” 属性。(19行)

    NestedScrollView 的 app:layout_behavior=”@string/appbar_scrolling_view_behavior” 属性(36行,该值是一个固定值)

    3 关于 Toolbar 的五种ScrollFlags

    分别是:scroll,enterAlways,enterAlwaysCollapsed,snap,exitUntilCollapsed

    3.1 scroll

    The view will be scroll in direct relation to scroll events. This flag

    needs to be set for any of the other flags to take effect. If any

    sibling views before this one do not have this flag, then this value

    has no effect.

    Child View 伴随着滚动事件而滚出或滚进屏幕。注意两点:第一点,如果使用了其他值,必定要使用这个值才能起作用;第二点:如果在这个child View前面的任何其他Child View没有设置这个值,那么这个Child View的设置将失去作用。

    app:layout_scrollFlags="scroll"

    Fmph8WEF_-13zdc6vyn7Msxz4_aS

    scroll

    3.2 enterAlways

    When entering (scrolling on screen) the view will scroll on any

    downwards scroll event, regardless of whether the scrolling view is

    also scrolling. This is commonly referred to as the ‘quick return’

    pattern.

    快速返回模式。其实就是向下滚动时Scrolling View和Child View之间的滚动优先级问题。对比scroll和scroll | enterAlways设置,发生向下滚动事件时,前者优先滚动Scrolling View,后者优先滚动Child View,当优先滚动的一方已经全部滚进屏幕之后,另一方才开始滚动。

    app:layout_scrollFlags="scroll|enterAlways"

    Fmph8WEF_-13zdc6vyn7Msxz4_aS

    enterAlways

    3.3 enterAlwaysCollapsed

    An additional flag for ‘enterAlways’ which modifies the returning view

    to only initially scroll back to it’s collapsed height. Once the

    scrolling view has reached the end of it’s scroll range, the remainder

    of this view will be scrolled into view. The collapsed height is

    defined by the view’s minimum height.

    enterAlways的附加值。这里涉及到Child View的高度和最小高度,向下滚动时,Child View先向下滚动最小高度值,然后Scrolling View开始滚动,到达边界时,Child View再向下滚动,直至显示完全。

    ...

    android:layout_height="150dp"

    android:minHeight="?attr/actionBarSize"

    app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"

    ...

    />

    Frkpl24T88WrPdDpAwrejHLNAnLw

    enterAlwaysCollapsed

    3.4 exitUntilCollapsed

    When exiting (scrolling off screen) the view will be scrolled until it

    is ‘collapsed’. The collapsed height is defined by the view’s minimum

    height.

    这里也涉及到最小高度。发生向上滚动事件时,Child View向上滚动退出直至最小高度,然后Scrolling View开始滚动。也就是,Child View不会完全退出屏幕。

    ...

    android:layout_height="150dp"

    android:minHeight="?attr/actionBarSize"

    app:layout_scrollFlags="scroll|exitUntilCollapsed"

    ...

    />

    FqmtmDxaoJxFCFsd6_6bTjoyHcuy

    exitUntilCollapsed

    3.5 snap

    Upon a scroll ending, if the view is only partially visible then it

    will be snapped and scrolled to it’s closest edge. For example, if the

    view only has it’s bottom 25% displayed, it will be scrolled off

    screen completely. Conversely, if it’s bottom 75% is visible then it

    will be scrolled fully into view.

    简单理解,就是Child View滚动比例的一个吸附效果。也就是说,Child View不会存在局部显示的情况,滚动Child View的部分高度,当我们松开手指时,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕,有点类似ViewPager的左右滑动。

    ...

    android:layout_height="150dp"

    android:minHeight="?attr/actionBarSize"

    app:layout_scrollFlags="scroll|snap"

    ...

    />

    FhhDTVqi5fh9oU0uChwlugxZWqAj

    snap

    展开全文
  • Android 仿QQ浏览器WebView滑动隐藏显示ActionBar效果
  • 仿UC浏览器,上滑隐藏头部,下滑显示头部。 监听WebView滑动事件,让头部自己滑动。
  • Android WebView 去除标题

    2016-08-24 21:50:54
    Android WebView 去除标题 利用javacript交互
  • 加载出webview滑动时候显示toast,松手后两秒toast隐藏
  • 安卓recyclerview嵌套webview造成的滑动冲突 最近在做一个智能客服的项目,整个聊天内容是一个recyclerview,里面每一条信息都是一个item,不同类型的回复对应不同的viewholder,其中有一个item的布局中有一个...

    此博客作为技术记录用,希望能帮助到需要的人。

    安卓recyclerview嵌套webview造成的滑动冲突

    最近在做一个智能客服的项目,整个聊天内容是一个recyclerview,里面每一条信息都是一个item,不同类型的回复对应不同的viewholder,其中有一个item的布局中有一个webview,该webview加载的h5页面的实际长度超过了手机屏幕的宽度,所以需要能够左右滑动,但是用户实际滑动过程中不可能完全水平滑动,更多是小角度的斜着滑。

    如果你了解view的事件分发机制和滑动的原理,就能预见到斜着滑动会导致这个webview在水平方向滑动会特别生硬且伴随着上下抖动。这是由于view滑动的原理是在一段时间内不断的调用draw方法重新绘制view,每次绘制之间的时间间隔很短,这样就实现了平滑的滑动效果(原理类似动画的制作)。

    至于view的事件分发可以看看郭神的博客
    Android事件分发机制完全解析,带你从源码的角度彻底理解(上).
    此处我是使用了一个相对布局作为一个webviewcontainer,通过设置其背景图片来设置聊天信息的背景图(类似qq)。


    此问题的解决办法是:重写这个相对布局,并重写它的ontouchevent方法,在方法中计算出用户滑动的方向和水平方向的夹角,如果超过60°,就判定为用户想上下滑动,就调用requestDisallowInterceptTouchEvent方法来干预其父控件recyclerview的intercptouchevent方法,让它拦截这个事件并处理;如果小于60°,就认为用户想左右滑动,即不让recyclerview拦截该事件。代码如下:

    
    public class AiRelativeLayout extends RelativeLayout {
            public float oldY;
            public float oldX;
            public float newY;
            public float newX;
            public AiRelativeLayout (Context context){
                super(context);
            }
            public AiRelativeLayout (Context context, AttributeSet attributeSet){
                super(context,attributeSet);
            }
    
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    newX = ev.getX();
                    newY = ev.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    //手指滑动同时判断滑动方向,一旦滑动方向大于+-60便调用
                    getParent().getParent().requestDisallowInterceptTouchEvent(true);
                    //将滑动事件交给RecyclerView来处理
                    oldX = newX;
                    oldY = newY;
                    newX = ev.getX();
                    newY = ev.getY();
                    float moveX = Math.abs(oldX - newX);
                    float moveY = Math.abs(oldY - newY);
                    //moveX * 1.73 < moveY  ,判断左右滑动范围为+-60度
                    if(moveX*1.73<moveY){
                        getParent().getParent().requestDisallowInterceptTouchEvent(false);
                    }
                    break;
    
            }
            return super.onInterceptTouchEvent(ev);
        }
    
    
    }
    
    

    代码中这个requestDisallowInterceptTouchEvent方法的参数是一个布尔型变量,传true表示禁止该view对事件的拦截,传false表示不禁止。此处我的这个重写的相对布局的父控件是一个线性布局,也就是这个item的根布局,其父布局就是recyclerview,所以调用了两次getParent()。此处如果你的webview没有重写过且以后都不会重写onInterceptTouchEvent方法的话,你可以直接重写这个webview而不是这个相对布局,相对应的,需要调用三次getParent()来控制recyclerview是否拦截事件。
    这段代码很好理解,就是计算用户每次滑动的角度,若超过60°就把事件分发给recyclerview处理,否则分发给webview,最终效果就是小于60°的斜着滑动只会让webview左右滑动,大于60°就是只会上下滑动。

    webview加载完之前白屏的问题解决

    如果是页面效果比较复杂的h5页面,页面完全加载是需要时间的,在加载完成之前会在webview的位置显示白色背景,这个背景不是背景图也不是背景色,而是webview自带的显示效果,无法通过设置隐藏。如果你对这个问题很在意的话这里我提供一个解决办法:这个办法有一个前提,那就是你还没对webviewclient进行自定义
    webview加载页面都需要调用loadurl方法,在此方法后加上以下代码

    mWebviewContainer.setVisibility(View.INVISIBLE);
    mWebView.loadUrl(url);
    mWebView.setWebViewClient(new WebViewClient(){
                    @Override
                    public void onPageFinished(WebView view, String url) {
                    	mWebviewContainer.setVisibility(View.VISIBLE);
                        super.onPageFinished(view, url);
                    }
                });
    

    这里的mWebviewContainer就是我前文中重写的相对布局,如果你不需要也可以重写webview,那么相应的这里也应该是对webview设置Visibility。需要在给webview加载链接之前就把它设置GONE,并在webviewclient中重写onpagefinished方法,该方法的调用即表示h5页面加载完毕,在此方法中再设置其可见,这样就解决掉了白屏的问题。
    如果你希望在加载完成之前让其完全不显示(不留空间)的话把开始设置的INVISIBLE换成GONE即可。
    以上,如有错误欢迎指正。

    展开全文
  • webview界面的滑动监听

    千次阅读 2017-12-05 16:57:40
    这项目中有这样一个功能要求: 首页上要有一个标题,如图上面要实现一些功能扫描登录的功能,下面整个是webview界面,要求在向下滑动的时候标题消失,滑动到顶端的时候把标题显示出来。  要完成以上功能,就要...


         最近在写一个商城的APP,是原生与html5混编。这项目中有这样一个功能要求:  首页上要有一个标题,如图上面要实现一些功能扫描登录的功能,下面整个是webview界面,要求在向下滑动的时候标题消失,滑动到顶端的时候把标题显示出来。

          要完成以上功能,就要对webview界面进行滑动监听。

            首先我们自定义一个Mywebview,代码如下:

    public class MyWebView extends WebView {
       private OnScrollChangeListener mOnScrollChangeListener;
    
       public MyWebView(Context context, AttributeSet attrs) {
          super(context, attrs);
       }
    
       @Override
       protected void onScrollChanged(int l, int t, int oldl, int oldt) {
          super.onScrollChanged(l, t, oldl, oldt);
          // webview的高度
          float webcontent = getContentHeight() * getScale();
          // 当前webview的高度
          float webnow = getHeight() + getScrollY();
          if (Math.abs(webcontent - webnow) < 1) {
             //处于底端
             mOnScrollChangeListener.onPageEnd(l, t, oldl, oldt);
          } else if (getScrollY() == 0) {
             //处于顶端
             mOnScrollChangeListener.onPageTop(l, t, oldl, oldt);
          } else {
             mOnScrollChangeListener.onScrollChanged(l, t, oldl, oldt);
          }
       }
    
       public void setOnScrollChangeListener(OnScrollChangeListener listener) {
          this.mOnScrollChangeListener = listener;
       }
    
       public interface OnScrollChangeListener {
    
          public void onPageEnd(int l, int t, int oldl, int oldt);
    
          public void onPageTop(int l, int t, int oldl, int oldt);
    
          public void onScrollChanged(int l, int t, int oldl, int oldt);
    
       }
    
    }
     

     

           然后在编写webview界面时使用我们的自定义的MyWebView,让后做滑动监听,代码如下:


    mWebView.setOnScrollChangeListener(new MyWebView.OnScrollChangeListener() {
        @Override
        public void onPageEnd(int l, int t, int oldl, int oldt) {
            mTitleLin.setVisibility(View.GONE);
        }
    
        @Override
        public void onPageTop(int l, int t, int oldl, int oldt) {
            mTitleLin.setVisibility(View.VISIBLE);
        }
    
        @Override
        public void onScrollChanged(int l, int t, int oldl, int oldt) {
            mTitleLin.setVisibility(View.GONE);
        }
    });

        当开始滑动时和滑动到低端时,标题栏隐藏起来,当滑动到顶端是,标题栏显示,这样我们要的效果就出来了










    展开全文
  • 最近在做一个app时遇到了这样一个问题:我采用了Navigation侧边栏切换Fragment,其中一个Fragment就需要用到WebView,需求是这个Fragment 里面的WebView滑动的时候Toolbar能够自动隐藏,然而弄了很久也没有办法实现...
  • 参考网址:... ... import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; public class ImageWebView extends WebView { public ImageWebView(Context c
  • webview隐藏滚动条

    千次阅读 2015-10-31 14:04:19
    webView.setHorizontalScrollBarEnabled(false);//水平不显示 webView.setVerticalScrollBarEnabled(false); //垂直不显示 webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);//滚动条在WebView内侧...
  • 滚动条不显示: webView....//垂直不显示隐藏缩放按钮:settings.setDisplayZoomControls(false);适应手机的分辨率://这方法可以让你的页面适应手机屏幕的分辨率,完整的显示在屏幕上,可
  • getNonGoneChildren()方法过滤掉隐藏的子view,隐藏的子view不参与布局。 上面的mScrollRange变量是布局自身可滑动的范围,它等于所有子view的高度减去布局自身的内容显示高度。在后面,它将用于计算布局的滑动偏移...
  • ToC知识点想快速解决的请直接看最后一节的解决方案问题描述在使用 React Navigation 时, 虽然各个 View 切换的性能和效果都非常不错,也可以用 transitionConfig...iOS 下,当我在 WebView 中用从最左滑到右的手势想...
  • 手指滑屏向上滚动(网页向下),如果地址栏隐藏,那么 地址栏 首先慢慢显示,然后 WebView 才开始滚动。 实现方案 根据 View 的 onInterceptTouchEvent 和 onTouchEvent 原理。把 ScrollView 设置为 WebView 的一个...
  • WebView和AppBarLayout嵌套滑动联动无效分析及解决办法

    千次阅读 热门讨论 2018-07-30 00:35:56
    WebView和AppBarLayout嵌套滑动无效分析及解决办法 目录 WebView和AppBarLayout嵌套滑动无效分析及解决办法 目录 序章 引题 Materials Design中AppBarLayout嵌套滑动的基本实现. 问题 分析 解决 嵌套滑动...
  • 在用BottomSheetDialog展示WebView/WheelView等滑动控件时,当向下拖动时我们会发现WebView/WheelView等滑动控件无法滑动,BottomSheetDialog向下滑动隐藏关闭了,如下效果: 解决问题 1.提出设想 一般WebView/...
  • 解决ios下滑动引起webview整体滚动

    千次阅读 2020-05-13 10:39:48
    在作flutter内webview内嵌h5的时候,遇到了在ios下滑动页面会出现橡皮筋效果,而在android下不会出现该问题。这样的话在ios下滑动会意外的触发会感觉页面整体在上下弹动。 方案1:在移动端h5中我们可以监听...
  • 如果我添加到NestedScrollView: android:fillViewport="true" 一切都与webview一起工作(页面加载,看起来很好,虽然从顶部开始),但我失去了隐藏/显示与工具栏:( 你有什么想法吗? 预先感谢您的帮助 :) (有关信息:...
  • Unity中的 浏览器插件:3D WebView,利用好该插件我们可以自己使用Unity打造出一个自定义的多样化浏览器。可以用于2D显示,也可以用于3D空间场景中使用,在PC端、手机端和VR设备等都可以有一个非常好的效果。一起来...
  • 监听webview滑动

    千次阅读 2015-12-01 19:09:26
    在如今html5越来越横行的年代,app里面webview的交互显得越发重要起来。。。 有时候你会碰到内置控件与webview共存在一个页面的情况。如下图: ...这个时候令人蛋疼的事儿就来啦。...然后webview自主滑动。。这才是
  • 日常开发中很少会碰到ScrollView中嵌套listview或webview的情况,而且谷歌官方也不推荐这么做,但是也不是一定不会有这样的需求,毕竟定需求的不是我们程序员,而是产品经理。比如像下面这种需求:  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,333
精华内容 1,733
关键字:

webview滑动隐藏