首先在XML中要注意:
TabLayout要是:android.support.design.widget.TabLayout;
依附的是design,版本号25.3.1;
如果报错就把build.gradle中最下面的版本号改了,改成一样的,一般是26.+,改完了编译一下,如果不能编译的话,打开扳手,打开里面的Build下面的Build Tools,点击Gradle,右边有个Offline work,选中它,就是取消在线编译,改成了离线编译就可以了;
然后把命名空间复制过来,复制到XML,xmlns:app=”http://schemas.android.com/apk/res-auto”;
这是TabLayout的一些设置
< !–app:tabGravity=”center” 设置居中对齐
app:tabIndicatorColor=”@color/colorAccent” 下滑线的颜色
app:tabMode=”scrollable”设置tabLayoout菜单的模式,,,scrollable可以横向滚动
app:tabSelectedTextColor=”@color/colorPrimaryDark”选中的时候文字的颜色
app:tabTextColor=”@color/colorPrimary”文本默认的颜色
– >
//示例布局
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/tab"
app:tabGravity="center"
app:tabIndicatorColor="@color/colorAccent"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorPrimaryDark"
app:tabTextColor="@color/colorPrimary"> < /android.support.design.widget.TabLayout>
(ViewPager是点击横向滑动时下面的页面也会切换)
<android.support.v4.view.ViewPager
android:layout_below="@+id/tab"
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager >
//在Main里
List<String> list = new ArrayList<> ();
//添加(横向滑动的条目)tab的显示项
list.add("头条");
list.add("军事");
list.add("娱乐");
list.add("新闻");
list.add("财经");
list.add("体育");
list.add("科技");
list.add("游戏");
//设置监听 就是选项卡选中时的监听
tab.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
//选中的时候调用的方法
@Override
public void onTabSelected(TabLayout.Tab tab) {
String text = tab.getText().toString();
//text实际上就是应用里面:推荐,,,头条,,,军事,,,娱乐....
Toast.makeText(MainActivity.this,text,Toast.LENGTH_SHORT).show();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
//2.重写这个方法getPageTitle,,,得到当前页面的标题
@Override
public CharSequence getPageTitle(int position) {
return list.get(position);
}
@Override
public Fragment getItem(int position) {
NewsFragment newsFragment = new NewsFragment();
//应该要做的是传值,,,,去fragment里面获取,,,获取到值之后,,,在进行url路径的拼接
Bundle bundle = new Bundle();
bundle.putString("name","头条");
newsFragment.setArguments(bundle);
return newsFragment;
}
@Override
public int getCount() {
return list.size();
}
});
//3.将tabLayout和viewPager关联起来
tab.setupWithViewPager(vp);
**//NewsFragment类,是一个Fragment,** (切换页面里面的内容,ViewPager的内容):
他的布局可以是一个ListView,
//获取数据
String name = getArguments().getString("name", "");
//判断
if (name.equals("头条")){
name = "top";
}else if (name.equals("军事")){
name = "junshi";
}else if (name.equals("社会")){
name = "shehui";
}else if (name.equals("财经")){
name = "caijing";
}else if (name.equals("国内")){
name = "guonei";
}
getDataFromNet(name);(此方法里是一个异步);
//MyAdapter类, 适配器:
//只是复用的优化
if (view == null){
view = View.inflate(context,android.R.layout.simple_list_item_1,null);
}
TextView textView = view.findViewById(android.R.id.text1);
textView.setText(list.get(i).getTitle());
return view;