首先设置页面的Fragment布局:

public class TabFragment extends ListFragment {
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle bundle = getArguments();
String url = bundle.getString("url");
List<String> datas = new ArrayList<>();
for (int i = 0; i < 100; i++) {
datas.add(url + "-------->" + i);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout
.simple_list_item_1, datas);
setListAdapter(adapter);
}
}
设置ViewPager的适配器
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private String[] urls; public MyFragmentPagerAdapter(FragmentManager fm, String[] urls) {
super(fm);
this.urls = urls;
} @Override
public Fragment getItem(int position) {
Fragment fragment = new TabFragment();
Bundle bundle = new Bundle();
bundle.putString("url", urls[position]);
fragment.setArguments(bundle);
return fragment;
} @Override
public int getCount() {
return urls.length;
}
}
代码:
public class TabActivity extends AppCompatActivity {
private ViewPager vp_tab;
private LinearLayout ll_title;//标题
private View v_indicator;//指示器
private int mCurrentIndex = 0;//记录当前位置
private HorizontalScrollView hsv_tab;
private String[] titles = {"社会", "军事", "娱乐", "体育", "科技", "本地", "经济", "房产"};
private String[] urls = {"社会url", "军事url", "娱乐url", "体育url", "科技url", "本地url", "经济url",
"房产url"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
initView();
} private void initView() {
vp_tab = (ViewPager) findViewById(R.id.vp_tab);
hsv_tab = (HorizontalScrollView) findViewById(R.id.hsv_tab);
ll_title = (LinearLayout) findViewById(R.id.ll_title);
v_indicator = findViewById(R.id.v_indicator);
FragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),
urls);
vp_tab.setAdapter(adapter);
initTab();
} private void initTab() {
int pixels = getResources().getDisplayMetrics().widthPixels;//获取屏幕宽度
final int titleWidth = pixels / 4;//设置标题宽度
ViewGroup.LayoutParams params = v_indicator.getLayoutParams();
params.width = titleWidth;
v_indicator.setLayoutParams(params);//给指示器设置同样的宽度
for (int i = 0; i < titles.length; i++) {
final TextView tv_title = new TextView(this);//设置标题
tv_title.setText(titles[i]);
if (i == mCurrentIndex) {
tv_title.setTextColor(Color.RED);
}
tv_title.setWidth(titleWidth);
tv_title.setGravity(Gravity.CENTER);
tv_title.setPadding(5, 5, 5, 0);
tv_title.setTag(i);//将每个标题对应页面的位置记录下来
//添加点击监听,让ViewPager跟着标题改变而改变
tv_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vp_tab.setCurrentItem((int) tv_title.getTag(), false);
}
});
ll_title.addView(tv_title);//将标题的TextView添加到LinearLayout中
}
vp_tab.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v_indicator
.getLayoutParams();
//设置左边距
params.leftMargin = (int) ((position + positionOffset) * titleWidth);
v_indicator.setLayoutParams(params);
//让ScrollView跟随移动
hsv_tab.scrollTo(params.leftMargin - titleWidth, 0);
} @Override
public void onPageSelected(int position) {
//将原本的TextView颜色设置成灰色,
TextView tv_title = (TextView) ll_title.getChildAt(mCurrentIndex);
tv_title.setTextColor(Color.GRAY);
mCurrentIndex = position;//获取当前页面索引
tv_title = (TextView) ll_title.getChildAt(mCurrentIndex);
//设置当前的TextView颜色为红色
tv_title.setTextColor(Color.RED);
} @Override
public void onPageScrollStateChanged(int state) { }
});
} }

Android使用ViewPager实现导航菜单的更多相关文章

  1. Android 抽屉效果的导航菜单实现

    Android 抽屉效果的导航菜单实现 抽屉效果的导航菜单 看了很多应用,觉得这种侧滑的抽屉效果的菜单很好. 不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而 ...

  2. [Android] 使用ViewPager 实现导航

    转载请标注:转载于http://www.cnblogs.com/Liuyt-61/p/6582667.html -------------------------------------------- ...

  3. Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动

    需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个“按钮”,中间是一个“空白布局(当然也可以是ViewPager等)”,下面是一个页面的导航菜单,底部是一个ListView. 要求:滑 ...

  4. android开发(38) 使用 DrawerLayou t实现左侧抽屉式导航菜单

    最近流行 左侧抽屉式的导航条菜单,知乎,360,QQ都使用了这样的导航菜单,我们也了解下: Android Design 的流行趋势:Navigation Drawer 导航抽屉 参考这篇文章:htt ...

  5. Android:有关下拉菜单导航的学习(供自己参考)

    Android:有关==下拉菜单导航==的学习 因为先前的学习都没想着记录自己的学习历程,所以该博客才那么迟才开始写. 内容: ==下拉菜单导航== 学习网站:android Spinner控件详解 ...

  6. Android实现下拉导航选择菜单效果

    本文介绍在Android中如何实现下拉导航选择菜单效果.   关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左 ...

  7. MDNavBarView下拉导航菜单(仿美团导航下拉菜单)

    说到下拉导航菜单这个东西用得还真不少,细心算一下做开发以来这样的菜单已经写了第三次了,但基本都是不能复用.感觉特累人.不经意看到同事写一个类似的下拉菜单,但他引用了开源库仿大众菜单的库,大致看了一下, ...

  8. Android自定义控件系列(四)—底部菜单(下)

    转载请注明出处:http://www.cnblogs.com/landptf/p/6290862.html 在app中经常会用到底部菜单的控件,每次都需要写好多代码,今天我们用到了前几篇博客里的控件来 ...

  9. [置顶] xamarin android Fragment实现底部导航栏

    前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment  Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...

随机推荐

  1. Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...

  2. 在node.js中如何屏蔽掉favicon.ico的请求

    今天准备用node做个api出来,还没入门,遇到一个小问题,特在此记录一下! 在做路由模块的时候,发现控制台每次都会多输出一条favicon.ico的请求,对于这种又占资源,看着又碍眼的玩意,强迫症完 ...

  3. 2.Node.js access_token的获取、存储及更新

    文章目录:         1.Node.js 接入微信公众平台开发         2.Node.js access_token的获取.存储及更新 一.写在前面的话   上一篇文章中,我们使用 No ...

  4. 通过wireshark学习Traceroute命令(UDP,ICMP协议)

    traceroute: 通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径.用来调试网络连接性和路由问题. mtr: traceroute的一个变种,能根 ...

  5. window maven批量删除.lastUpdated文件

    当下载网络上的jar包 网络不通 中途中断 会产生.lastUpdated,maven就不在从网上下载jar包了 很烦 ~~~ 执行下面的批处理程序即可 @echo off set REPOSITOR ...

  6. Android计时器实现

    Wyy.java package com.test; import android.app.Activity;import android.app.Service;import android.os. ...

  7. windows8.1安装之后的感想

    这蛋疼的换了系统之后,发现windows8在界面方面确实花了不少功夫,但是自我感觉,比较适合触屏的平板电脑用.   我笔记本操作体验一般般.windows8不吃内存.这是真的.我机子占了25%左右.刚 ...

  8. WAF指纹探测及识别技术

    Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HT ...

  9. Spring学习(4)---Bean基础

    Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources & ResourceLoader (一) Bean配置项 常用的配置项 Id   (IOC容器中B ...

  10. epclise设置tomcat方法(步骤)(菜鸟巧记二)

    epclise设置tomcat 1.打开epclise→window→preferences 2.输入server,打开server→runtime environments→选择add新建 3.打开 ...