Android中【下拉刷新/上拉加载】WebView网页控件,Snackbar+CoordinatorLayoutt提示框(指定位置显示的提示框)

工作内容:

1.项目中实现下拉刷新,上拉加载

2.WebView的使用【支持javascript,监听加载网页进度】

【报错地方:用户第一次进入,用户点击返回键【此时webview还未加载完成】会报错退出——出来办法,判断webview!=null执行webview.destory,再finish();退出浏览器】

3.Snackbar+CoordinatorLayoutt提示框【引入com.android.support:design:23.2.1包】

学习分享:

一、项目中实现下拉刷新,上拉加载

下拉刷新

实现步骤:【引入v4包—看代码中的包名——直接在Android studio中的library Dependencies添加support v4】

1.这里主要涉及一个控件【SwipeRefreshLayout】的使用,直接贴代码了

取消下拉动画:

swipeRefreshLayout.setRefreshing(false);//设置取消刷新动画

xml代码:

<!--
下拉刷新布局控件中包含一个RecylerView
实现下拉刷新【出现下拉刷新图标】
-->
<android.support.v4.widget.SwipeRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:id="@+id/srl_fnih">
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv_fnih"
        ></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
<!--上拉加载时显示出来-->
<TextView
    android:layout_width="match_parent"
    android:layout_height="25dp"
    android:background="@color/gray"
    android:gravity="center"
    android:visibility="gone"
    android:textSize="12sp"
    android:id="@+id/tv_fnih"
    android:textColor="@color/white"
    android:text="加载中..."
    />

2.java中设置:

swipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.srl_fnih);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { //添加下拉监听
    @Override
    public void onRefresh() {
        state = REFRESH_FLAG;
        requestData();	//【RecylerView显示在第一项】用户下拉界面时执行(去请求数据)
    }
});
上拉加载

/**
 * 上拉加载数据
 * (boolean isLastItem)标识RecylerView已经显示出最后一项,并且用户再次上拉
 * isLastItem为真时显示TextView,false时隐藏TextView
 */
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if(newState == RecyclerView.SCROLL_STATE_IDLE){//判断滑动结束
            lastPosition = (layoutManager).findLastVisibleItemPosition();
            if(lastPosition == adapter.getItemCount()-1){//判断recylerView已经显示出最后一项
                if(isLastItem){
                    textView.setVisibility(View.VISIBLE);
                    requestPages++;     //请求页面自增
                    state = ADD_FLAG;
                    requestData();   //调用请求数据方法,方法中请求的页面已经改变
                }else{
                    isLastItem = true;
                }
            }else{
                isLastItem = false;
                textView.setVisibility(View.INVISIBLE);//隐藏
            }
        }
    }
});
效果图如下:


二、WebView的使用【支持javascript】

直接贴代码了,代码中有详细说明:

<WebView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/web_show_web"
    />
java代码:设置webView

webView.loadUrl(urlString);
webView.setWebViewClient(new MyWebClient());    //设置在本页显示
webView.setWebChromeClient(new MyWebChromeClient());  //设置进度监听,自定义类MyWebChromeClient继承自WebChromeClient
webView.getSettings().setLoadWithOverviewMode(true);  //设置加载在本页
webView.getSettings().setJavaScriptEnabled(true);   //加载javascript
...
//页面加载进度监听类
    class MyWebChromeClient extends WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            //加载进度newProgress
            progressBar.setProgress(newProgress);
        }
    }
    //页面加载监听类
    class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);//本webView加载【不会去调用系统的加载】
            return true;
        }

        //开始加载网页时调用
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
//            LogTool.e("onPageStarted_url:" + url);//要加载的页面
            /**
             * 这里的 webview.getUrl()有2种情况
             * 1.点击webview中的链接加载一个页面时:得到的是加载之前的页面
             * 2.调用goBack/goForward时:得到的是目标url与参数中的url相同
             */
//            LogTool.e("onPageStarted_getUrl:" + webview.getUrl());
        }

        /**
         * 1.页面加载完成后将页面信息写入历史记录
         * 2.设置页面的收藏图标[是/否被收藏]
         * 3.页面加载完成后去判断是否已被收藏
         * @param view
         * @param url
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            PageInfo temp = new PageInfo(webview.getTitle(), webview.getUrl());
            if (temp.getTitle() != null && temp.getTitle() != "")
                saveHistory(temp);  //将浏览信息保存到本地[浏览历史记录]
            isLoaded = true;
            handler.sendEmptyMessage(0);
        }
    }

实现效果:可以加载99%的正常页面并显示其中的Javascript动画

三、Snackbar+CoordinatorLayoutt提示框

/**
 * Snackbar.LENGTH_INDEFINITE 一直显示(点击了之后消失)
 * Snackbar.LENGTH_LONG     显示时间3秒左右
 * Snackbar.LENGTH_SHORT    显示时间1.5秒左右
 */
coordinatorLayout = (CoordinatorLayout)findViewById(R.id.cdlayout);
Snackbar snackbar=Snackbar.make(coordinatorLayout,"点我生孩子",Snackbar.LENGTH_INDEFINITE);//提示栏中左边信息
snackbar.getView().setBackgroundColor(Color.GREEN);   //设置背景色
snackbar.setAction("点我回家过年", new View.OnClickListener() {//设置内容监听
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"点击了snackbar中的右边文字",Toast.LENGTH_SHORT);
            }
        }).setActionTextColor(Color.BLUE);  //设置右边文字颜色
snackbar.show();
演示效果:【coordinatorLyout放置在哪,最后显示提示就在哪】


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值