首先设置页面的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. centos7.2下编译安装apache2.4

    1.安装编译工具 [root@carl httpd-2.4.25]# yum groupinstall 'Development Tools' 'Server Platform Development ...

  2. Open vSwitch中的datapath flow匹配过程

    看OVS2.7的datapath表项匹配是一件很蛋疼的事情 数据结构看不懂 匹配算法经过了多次演进,已经有点复杂了,看代码完全看不懂,我能怎么办,我也很绝望啊!   2.1之前精确匹配时代,匹配过程是 ...

  3. PHP初体验

    PHP初体验 提笔写初体验总不知道从何说起,直接聊PHP中的函数.PHP网络技术.数据库操作.PHP模板等感觉又不是初体验.最后还是决定从PHP的面向对象.PHP的魔术方法.PHP的反射.PHP中的异 ...

  4. RSA加密算法

    class Program { static void Main(string[] args) { RSAPublicKey P = new RSAPublicKey(); P.Exponent = ...

  5. js禁止浏览器的回退事件

    直接来个终极方案: 查找了好多资料才找到的,这种方式,可以消除 后退的所有动作.包括 键盘.鼠标手势等产生的后退动作. <script language="javascript&quo ...

  6. centos文件权限详解

    假设回显信息为  ①-②rws③r-x④r-x ⑤1 ⑥root ⑦root ⑧430540 ⑨Dec 20 18:27 ⑩/usr/sbin/passwd ,现在逐一分析其内容. ①. 首字符-,表 ...

  7. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  8. 实现一个javascript手势库 -- base-gesture.js

    现在移动端这么普及呢,我们在手机上可以操作更多了.对于网页来说实现一些丰富的操作感觉也是非常有必要的,对吧(如果你仅仅需要click,,那就当我没说咯...)~~比如实现上下,左右滑动,点击之类的,加 ...

  9. [编织消息框架][netty源码分析]11 UnpooledHeapByteBuf 与 ByteBufAllocator

    每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...

  10. Example005控制弹出窗口居中显示

    <!-- 实例005控制弹出窗口居中显示 --> <head> <meta charset="UTF-8"> </head> < ...