首先设置页面的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. AbstractHandlerMapping解读

    一.AbstractHandlerMapping简介 AbstractHandlerMapping是HandlerMapping的抽象实现,所有的HandlerMapping都继承自AbstractH ...

  2. 基于谱聚类的三维网格分割算法(Spectral Clustering)

    谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...

  3. 从RGB色转为灰度色算法

    一.基础  对于彩色转灰度,有一个很著名的心理学公式: Gray = R*0.299 + G*0.587 + B*0.114 二.整数算法 而实际应用时,希望避免低速的浮点运算,所以需要整数算法. 注 ...

  4. 【2017-06-06】Ajax完整结构、三级联动的制作

    一.Ajax完整结构 $.ajax({ url:"Main.ashx", data:{}, dataType:"json", type:"post&q ...

  5. SqlDataReader 之指定转换无效

    //获取最新显示顺序数据 string str = string.Format(@"if exists(select ShowOrder from GIS_FuncDefaultLayer ...

  6. js继承的常用方法

    写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...

  7. 浅谈卷积神经网络及matlab实现

    前言,好久不见,大家有没有想我啊.哈哈.今天我们来随便说说卷积神经网络. 1卷积神经网络的优点 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  8. Spring+TaskExecutor实例

    1 taskExcutor package com.test; import org.springframework.core.task.TaskExecutor; public class Main ...

  9. Python入门(2)

    一.    基础语法 1.Print print 是 python 里很基本很常见的一个操作,它的操作对象是一个字符串. 直接在 print 后面加一段文字来输出的话,需要给文字加上双引号或者单引号. ...

  10. 记一次linux主机名莫名其妙变成了bogon

    起因:公司网络接口做了接口认证,虚拟机桥接至物理网卡无法完成认证进行网络访问,无奈之下只能讲虚拟机网络模式更改为NAT模式,更改完成之后进行ssh登录,发现主机名发生了变化. 更改NAT模式之前 [r ...