Android 导航栏如何轻松搞定
APP市场中大多数新闻App都有导航菜单,导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面,今日头条, 网易新闻等。
话不多说直接先上原型图,如图1,图2,图3。
首先是新闻Fragment:
import java.io.File;import java.nio.channels.Channel;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONException;import org.json.JSONObject;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.ClearCacheRequest;import com.android.volley.toolbox.DiskBasedCache;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.juronggvo.R;import com.juronggvo.adapter.ExerciseAdapter;import com.juronggvo.adapter.NewsAdapter;import com.juronggvo.adapter.PageFragmentAdapter;import com.juronggvo.bean.NewsBean;import com.juronggvo.data.Config;import com.juronggvo.data.Contants;import com.juronggvo.data.GlobalData;import com.juronggvo.ui.inform.InformActivity;import com.juronggvo.ui.news.NewsActivity;import com.juronggvo.utils.Utils;import com.juronggvo.widget.MyListView;import com.juronggvo.widget.NewsTitleTextView;import com.juronggvo.widget.NewsViewPagerAdapter;import com.juronggvo.widget.PullToRefreshView;import com.juronggvo.widget.PullToRefreshView.OnFooterRefreshListener;import com.juronggvo.widget.PullToRefreshView.OnHeaderRefreshListener;import android.R.bool;import android.annotation.SuppressLint;import android.content.Intent;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.provider.Settings.Global;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.LayoutParams;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.FrameLayout;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;/*** 新闻资讯* @description* @data 2016年12月13日* @author yang.yang*/public class NewsFragment extends Fragment implements OnPageChangeListener {private RadioGroup rgChannel;private View view;private ViewPager viewPager;private HorizontalScrollView hvChannel;private PageFragmentAdapter adapter=null; private int page = 1 ;private Object newsLists; private ListfragmentList=new ArrayList();private RequestQueue requestQueue =null;private ExerciseAdapter newsAdapter;private Handler handler = new Handler() ;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = inflater.inflate(R.layout.fragment_new, container, false);return view ;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);init() ;setTab(Config.newsPosition,true);}private void init(){requestQueue = Volley.newRequestQueue(getActivity());rgChannel=(RadioGroup)view.findViewById(R.id.rgChannel);viewPager=(ViewPager)view.findViewById(R.id.vpNewsList);hvChannel=(HorizontalScrollView)view.findViewById(R.id.hvChannel);rgChannel.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group,int checkedId) {viewPager.setCurrentItem(checkedId);}});viewPager.setOnPageChangeListener(this);initTab();//动态产生RadioButtoninitViewPager();}private void initTab(){ ListchannelList=ChannelDb.getSelectedChannel();for(int i=0;i<channelList.size();i++){RadioButton rb=(RadioButton)LayoutInflater.from(getActivity()).inflate(R.layout.tab_rb, null);rb.setId(i);rb.setText(channelList.get(i));RadioGroup.LayoutParams params=newRadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,RadioGroup.LayoutParams.WRAP_CONTENT);rgChannel.addView(rb,params);}}private void initViewPager(){adapter=new PageFragmentAdapter(super.getFragmentManager());viewPager.setAdapter(adapter);viewPager.setOffscreenPageLimit(0);}/*** 滑动ViewPager时调整ScroollView的位置以便显示按钮* @param idx*/private void setTab(final int idx,boolean flag){RadioButton rb=(RadioButton)rgChannel.getChildAt(idx);rb.setChecked(true);int left=rb.getLeft();int width=rb.getMeasuredWidth();DisplayMetrics metrics=new DisplayMetrics();super.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);int screenWidth=metrics.widthPixels;final int len=left+width/2-screenWidth/2;hvChannel.smoothScrollTo(len, 0);//滑动ScroollViewSystem.out.println("len====="+len);}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int position) {// TODO Auto-generated method stubsetTab(position,false);}}复制代码
其中要用的fragment_new.xml
ChannelDb 类
import java.nio.channels.Channel;import java.util.ArrayList;import java.util.List;public class ChannelDb {private static ListselectedChannel=new ArrayList();static{selectedChannel.add("热点资讯");selectedChannel.add("开发区概括");selectedChannel.add("最新动态");selectedChannel.add("文化生活");selectedChannel.add("旅游景点");selectedChannel.add("句容资讯");selectedChannel.add("党建园地");selectedChannel.add("重点工程");}public static ListgetSelectedChannel(){return selectedChannel;}}复制代码
tab_rb.xml
PageFragmentAdapter 类
import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;public class PageFragmentAdapter extends FragmentPagerAdapter{private String[] tabs = { "热点资讯", "开发区概括","最新动态","文化生活","旅游景点","句容资讯","党建园地","重点工程" };private FragmentManager fm;public PageFragmentAdapter(FragmentManager fm ){super(fm);this.fm=fm;}/*** 返回每页对应的fragment的对象*/@Overridepublic Fragment getItem(int position) {return NewsFragmentFactory.create(position);}@Overridepublic int getCount() {return tabs.length;}@Overridepublic int getItemPosition(Object object) {return POSITION_NONE; //没有找到child要求重新加载}}NewsFragmentFactory类import com.juronggvo.ui.fragment.ApplyCarFragment;import com.juronggvo.ui.fragment.ApplyMeetingFragment;import com.juronggvo.ui.fragment.CulLifeFragment;import com.juronggvo.ui.fragment.DevoAreFragment;import com.juronggvo.ui.fragment.HotpointFragment;import com.juronggvo.ui.fragment.ImportantProFragment;import com.juronggvo.ui.fragment.JuRongFragment;import com.juronggvo.ui.fragment.NewRecentFragment;import com.juronggvo.ui.fragment.PartyBuildFragment;import com.juronggvo.ui.fragment.TravelFragment;import android.support.v4.app.Fragment;public class NewsFragmentFactory {/*** 根据不同的position生产对应的fragment对象* @param position* @return*/public static Fragment create(int position){Fragment fragment = null;switch (position) {case 0:fragment = new HotpointFragment();break;case 1:fragment = new DevoAreFragment();break;case 2:fragment = new NewRecentFragment();break;case 3:fragment = new CulLifeFragment();break;case 4:fragment = new TravelFragment();break;case 5:fragment = new JuRongFragment();break;case 6:fragment = new PartyBuildFragment();break;case 7:fragment = new ImportantProFragment();break;}return fragment;}}复制代码
然后在每个pager页面写你自己要的数据 就可以了。
伟大的哲学家我自己曾经说过,有梦想就要大声说出来 ,万丈高楼平地起,能不能行靠自己!
Android 导航栏如何轻松搞定相关推荐
- Android沉浸式状态栏工具类,一句代码轻松搞定
Android沉浸式状态栏工具类,一句代码轻松搞定 博客原文及源码地址:http://jaeger.itscoder.com/android/2016/03/27/statusbar-util.htm ...
- 轻松搞定表白女朋友:Android版APP (零基础也可直接下载软件)
轻松搞定表白女朋友:Android版软件 (零基础也可直接下载软件) 在我们平时生活当中,经常会看到一些表白女朋友的html网页,但是Android端的表白软件可以说是基本没有,笔者在全网搜了一下,就 ...
- 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解 ...
- android如果手机屏锁忘记了怎么办,手机屏幕锁忘记图案怎么办 自己也能轻松搞定...
手机屏幕锁忘记图案怎么办 自己也能轻松搞定 来源:www.18183.com作者:皮卡时间:2015-04-07 手机功能也越来越强大,甚至可以替代电脑,所以手机中存储着大量的个人隐私,很多用户习惯使 ...
- 安卓zip解压软件_[Android]安卓最强解压工具,轻松搞定一键解压!
哈喽,各位小伙伴们大家好啊,分享君又来给大家更新资源了!最近在使用手机的时候,有很多次就是遇到需要解压的安装包,有时候解压还特别麻烦,手机又不是经常安装解压软件.所以,今天分享君就来分享一款安卓最爱解 ...
- 免费报表工具零代码零基础轻松搞定 web 报表
话说,能制作清单式报表的方式有千千万: 骨灰级的 Excel 控,如果能轻车熟路驾驭 VBA,也能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选手: 传说中的编程控,只要需求明确没什么做不了的 ...
- 函数字节不对齐函数崩溃_Excel中统计字符数,不需要一个一个的数,len函数能轻松搞定...
简介:要统计Excel单元格中的字符数,不需要一个一个的数,利用len函数就能轻松搞定. 问:什么是len函数? 答:自动统计字符数的函数 问:怎样记住len函数 答:len是length(长度)的简 ...
- [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
前天熬了大半宿发了一篇[一行代码轻松搞定快捷留言功能],同时发布了V1.0beta版的快捷留言功能和源代码,之所以是beta版,就是当时感觉虽然基本功能有了,但是还不够完善,特性也不一定合理,今天不知 ...
- 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告,第 2 部分
本周您推脱老板的 #432 创新理由了吗?您是否尝试过推脱? 本系列的其他文章 读取.回收和重用:使用 Excel.XML 和 Java 技术轻松搞定报告,第 1 部分 有幸的是,您不必推脱.本系列的 ...
最新文章
- 社交媒体分析-恶意内容自动检测相关论文
- 数学建模学习笔记——灰色关联分析(评价类)
- c语言编程中%g是什么格式
- Apache Camel 3.1 – XML路由的快速加载
- JMetro 5.5版发布
- fanuc roboguide_FANUC机器人虚拟仿真教程:Roboguide弧焊仿真工作站工装添加
- 2019年最佳作家奖
- 计算机应用基础考试试题,2017计算机应用基础考试试题及答案
- phython拟合曲面方程_python数据关系型图表散点图系列曲面拟合图
- 全球100ai顶尖科学家_如何为顶尖学校学习AI撰写成功的目标陈述
- ASP.net网页导出Excel中文乱码解决方案
- linux 下面dev文件,Linux下目录的含义,例如lib中放置了什么文件,dev是什么
- 解决方案:LoadLibrary加载动态库失败,错误代码126
- C语言----整钱换零钱问题。把1元兑换成1分,2分,5分的硬币,共有多少种不同的兑换方法?(同理n元硬币的兑换方法呢?n元由用户输入)
- 组建家庭计算机网络过程是怎么样的,如何组建完善的家庭无线网络操作步骤
- ora-01652无法通过128(在表空间temp中)扩展temp段
- python写生日祝福语大全_【Python 1-6】Python教程之——数字
- 输入今天日期输出明天日期
- M1芯片的mac下的Xcode12以上版本编译报错 this target. for architecture arm64等问题解决方案
- Python中jieba库的使用