工作内容:
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
...
实现效果:可以加载99%的正常页面并显示其中的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); } }
三、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放置在哪,最后显示提示就在哪】