安卓仿手机网易新闻app项目开发系列之(六)点击页面跳转和网络路径拼接
来源:互联网 发布:程序员随身携带必备 编辑:程序博客网 时间:2024/06/01 09:38
一.项目简介和思路
终于到最后一章了,不容易啊~~ 上次我们已经实现了点击不同的item返回相应的位置,现在最后我们要做的就是点击不同界面并跳转到相应的新闻页面,而且是和手机相适应的页面,接下来讲讲流程。
二.项目流程
1)点击页面跳转
跳转页面的xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.hongaer.molinews.View.MsgActivity"> <WebView android:id="@+id/webview_msg" android:layout_width="match_parent" android:layout_height="match_parent"/> <include layout="@layout/header"/></RelativeLayout>
这里用的是webview网页形式的视图------------------------------<app:android.support.v7.widget.Toolbar android:id="@+id/toolbar_msg" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" android:background="@color/colorPrimaryDark" app:navigationIcon="@mipmap/e992f21e86250f3478ee7e650ef5a958" app:titleTextColor="@color/colorwhite" xmlns:app="http://schemas.android.com/apk/res-auto"> </app:android.support.v7.widget.Toolbar >
这里是给webview网页的标题栏,用的是toolbar,主要是设置标题的背景颜色、字体大小,关键有个是回退健的设置navigationico,需要给它添加图片 ---------------------------------------------
然后给回退按键设置点击事件,实现点击后进行返回,很简单,就只需要加一段代码,在msgactivity.java
Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar_msg); //设置返回按键可用 setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); //设置返回按键触发事件 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); }
跳转界面主程序 firstpagerfragment.java:
private void initListener() { adapter.setMyItemClickListener(new FirstPageAdapter.MyItemClickListenter() { @Override public void onclick(View v, int position) { String url= item_list.get(position-1).getUrl(); Intent intent=new Intent(getActivity(), MsgActivity.class); intent.putExtra("url",url); startActivity(intent); Log.i("888","onclick----------->position"+position);// 在这里获取数据,进行处理 } });
在点击监听事件里写实现界面跳转程序,首先是获取点击界面的url,然后通过intent跳转到网页界面msgactivity,并把url网络地址传过去网页界面 msgactivity.java:
public class MsgActivity extends AppCompatActivity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_msg); webView= (WebView) findViewById(R.id.webview_msg); //打开页面,自适应屏幕 WebSettings webSettings=webView.getSettings(); webSettings.setUseWideViewPort(true); //设置屏幕比例任意缩放 String url=getIntent().getStringExtra("url"); webView.loadUrl(url); } }
此段是网页的界面的程序,主要是设置了网页的自适应属性和获取从 firstpagerfragment传过来的url,然后加载显示。下面是加载出来后的页面效果:
可以看到,由于我们加载的电脑端的网页,所以在手机上显示会有些乱,接下来我们来把电脑格式的网页转化成手机端的
2)网络路径的拼接
因为上面打开的网页都是电脑端的网页,而我们需要的手机格式的网页,所以需要去把电脑版的网页转化成手机版的。怎么做呢?先来看看这两者的路径有什么区别
网页版的url :
手机版:
可以看出来两者格式比较类似,都有着一段数字/,当把网页版的最后数字部分复制到手机版后面数字部分,这时会发现,网页版的格式就变成了手机格式的了:
所以就按照这样的思路来进行后续的路径拼接。 下面是路径拼接的程序:
private String getUrlByPosition(int position) { String oldUrl=getIntent().getStringExtra("url"); StringBuilder url=new StringBuilder(); String num=getMainNum(oldUrl,position); switch (position){ //http://imil.ifeng.com/ispecial/40089/index.shtml case 0: //新闻 Log.i("999","i.feng-------------------------->"); url=url.append("http://inews.ifeng.com/").append(num).append("/news.shtml"); break; case 1://财经 Log.i("777","i.feng-------------------------->"); url=url.append("http://istock.ifeng.com/").append(num).append("/news.shtml"); break; case 2://体育 url=url.append("http://isports.ifeng.com/").append(num).append("/news.shtml"); break; case 3://军事 url=url.append("http://imil.ifeng.com/").append(num).append("/news.shtml"); break; case 4://科技 url=url.append("http://itech.ifeng.com/").append(num).append("/news.shtml"); break; case 5://历史 url=url.append("http://ihistory.ifeng.com/").append(num).append("/news.shtml"); break; case 6://凤凰要闻 url=url.append("http://ifenghuanghao.ifeng.com/").append(num).append("/news.shtml"); break; }
-----------------------------------------------------------------华丽分割线-------------------------------------这部分是获取网页程序最后边那段数字的程序:
//截取中间数字的方法 private String getMainNum(String oldUrl,int index) { if(index<6) { oldUrl = oldUrl.substring(oldUrl.lastIndexOf("/") + 1, oldUrl.lastIndexOf(".")); if (oldUrl.contains("_")) { oldUrl = oldUrl.substring(0, oldUrl.lastIndexOf("_")); } } else{ oldUrl = oldUrl.substring(0,oldUrl.lastIndexOf("/")); oldUrl = oldUrl.substring(oldUrl.lastIndexOf("/")+1,oldUrl.length()); } return oldUrl; }
--------------------------------------------------------------首先是获取网页形式的url,然后创建一个stringbuilder类型的实例对象,里面有一个append的方法,可以实现字符串的连接。然后调用getmainnum()方法获取网页url的数字部分,最后进行与手机url路径的拼接。拼接代码比较简单,可以对比上面的图片就可以看的懂。主要有个栏目的url需要注意下,就是凤凰号栏目的,它的网页路径格式是这样的:
手机版路径:
发现它和其他的栏目不同在于网页版路径就只有一个/数字,所以需要给它单独写代码进行截取,只需要先把最后/之前的先截取出来“http://ifenghuanghao.ifeng.com/20135529”,然后在截取/ 到这个字符串的结束,即它的长度下标,就可以把数据提取出来了。
最后在添下主程序代码:
public class MsgActivity extends AppCompatActivity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_msg); webView= (WebView) findViewById(R.id.webview_msg); //打开页面,自适应屏幕 WebSettings webSettings=webView.getSettings(); webSettings.setUseWideViewPort(true); //设置屏幕比例任意缩放 int position=getIntent().getIntExtra("position",0); String url=getUrlByPosition(position); webView.loadUrl(url); Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar_msg); //设置返回按键可用 setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); //设置返回按键触发事件 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); }
主要写了得到position,这个position是在firstpagefragment传过来的mposition,会根据点击不同 tab而变;还有一个就是根据不同的position来拼接新的手机路径方法:geturlbyposition(),然后返回最终的手机url,最后在执行loadurl(),实现跳转相应的手机页面。看看最终运行的效果:
到这里,新闻客户端系列也就结束了,后续会上传代码到GitHub上,欢迎下载 https://github.com/hongaer24
- 安卓仿手机网易新闻app项目开发系列之(六)点击页面跳转和网络路径拼接
- 安卓仿手机网易新闻app项目开发系列之(一)项目简介和 界面搭建
- 安卓仿手机网易新闻app项目开发系列之(三)数据抓取和解析 上
- 安卓仿手机网易新闻app项目开发系列之(三)数据抓取和解析 下
- 安卓仿手机网易新闻app项目开发系列之(五)tablayout事件和recycle事件
- 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写
- 安卓仿手机网易新闻app项目开发系列之(四)数据分离与填充界面 上
- 安卓仿手机网易新闻app项目开发系列之(四)数据分离与填充界面 下
- 仿网易新闻APP(六)——优化网络任务(在AS中使用okHttp工具包)
- Android-应用开发-页面跳转和数据传递(六)
- iOS项目之Swift新闻App(二)—网络数据请求和添加TableHeader
- ios开发系列之页面跳转
- Android之项目开发中在app内Intent意图跳转自己指定的Html5页面
- 练习项目 一款新闻app的开发 (三):通过Rxjava + Retrofit2框架获取网络数据
- 项目开发之闪屏页+跳转页面
- Android demo-->网易新闻风格的RSS新闻抓取项目(二) 新闻列表刷新、天气预报、设置页面滑动开关
- echarts图表点击事件之跳转页面和加载页面
- echarts图表点击事件之跳转页面和加载页面
- 合同数据库设计
- 暑期项目开发实训 Day2
- linux下vi命令修改文件及保存等使用方法整理
- 求矩形覆盖面积
- Decision Tree
- 安卓仿手机网易新闻app项目开发系列之(六)点击页面跳转和网络路径拼接
- Linux rename
- Angular 模板
- 【STL】关联式容器
- ARC 指南-weak strong
- MySQL的安装、配置以及工具的使用
- PHP之路径
- Retrofit 2 入门指南
- 权限数据库表设计