Android Tablayout+ViewPager使用及遇到的问题
来源:互联网 发布:linux 宕机日志 编辑:程序博客网 时间:2024/06/01 09:20
AndroidStudio添加gradle依赖
//TabLayoutcompile 'com.android.support:support-v4:26.+'compile 'com.android.support:design:26.0.0-alpha1'//ViewPageandroid.support.v4.view.ViewPager
layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/mainBack" android:layout_marginBottom="58dp"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingLeft="10dp" android:paddingRight="10dp"> <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="40dp" android:layout_marginLeft="40dp" app:tabGravity="fill" app:tabIndicatorHeight="2dp" app:tabTextColor="@color/tabText" app:tabSelectedTextColor="@color/tabText" app:tabIndicatorColor="@color/tab_buttom" app:tabTextAppearance="@style/MyTabLayoutTextAppearance"/> <ImageButton android:id="@+id/ib_camera" android:layout_width="25dp" android:layout_height="20dp" android:layout_marginBottom="10dp" android:layout_marginTop="10dp" android:background="@mipmap/camera" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical|right" /> </FrameLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/white" android:paddingBottom="15dp"/></LinearLayout>
注意点:
1。要实现文字和底部标签indicator分离需要设定
app:tabGravity="fill"
2。设置底部indicator的高度和颜色
app:tabIndicatorHeight="2dp" app:tabIndicatorColor="@color/tab_buttom"
3。设置tab文字样式
app:tabTextAppearance="@style/MyTabLayoutTextAppearance" 在style中 <!-- tablayout的字体和颜色 --> <style name="MyTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textSize">20sp</item> <item name="android:textColor">@color/tabText</item> </style>
效果
Activity准备实现
1。FragmentPagerAdapter用来给viewpager指定适配器
package com.wj.shoes.adapter;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.List;/** * for: viewpager的适配器 * Created by wangjian on 2017/8/3. */public class SocialViewpagerAdapter extends FragmentPagerAdapter{ private List<Fragment> list; private String[] titles = new String[]{"话题", "热点", "关注"}; public SocialViewpagerAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.list = list; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } //重写这个方法,将设置每个Tab的标题,避免tab中文字不显示 @Override public CharSequence getPageTitle(int position) { return titles[position]; }}
2。根据tab个数的Fragment
自己定义几个Fragment
3。将tab与viewpager关联
private List<Fragment> list = new ArrayList<>(); private SocialViewpagerAdapter adapter; //数据源 list.add(new TopicFragment()); list.add(new HotFragment()); list.add(new AttentionFragment()); //适配器 FragmentManager fm = getSupportFragmentManager(); adapter = new SocialViewpagerAdapter(fm,list); viewpager.setAdapter(adapter); tabLayout.setupWithViewPager(viewpager); //默认选中 tabLayout.getTabAt(1).select();
4。设置tab的indicator宽度
方法
package com.wj.shoes.widget;import android.content.res.Resources;import android.support.design.widget.TabLayout;import android.util.TypedValue;import android.view.View;import android.widget.LinearLayout;import java.lang.reflect.Field;/** * for: 设置tablayout的指示器长度 * Created by wangjian on 2017/8/3. */public class TablayoutIndicator { public void setIndicator(TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Field tabStrip = null; try { tabStrip = tabLayout.getDeclaredField("mTabStrip"); } catch (NoSuchFieldException e) { e.printStackTrace(); } tabStrip.setAccessible(true); LinearLayout llTab = null; try { llTab = (LinearLayout) tabStrip.get(tabs); } catch (IllegalAccessException e) { e.printStackTrace(); } int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics()); int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics()); for (int i = 0; i < llTab.getChildCount(); i++) { View child = llTab.getChildAt(i); child.setPadding(0, 0, 0, 0); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1); params.leftMargin = left; params.rightMargin = right; child.setLayoutParams(params); child.invalidate(); } }}
使用
@Override public void onStart() { super.onStart(); tabLayout.post(new Runnable() { @Override public void run() { /** * 在tablayout渲染之后设置tablayout的指示器长度 * tab left right */ new TablayoutIndicator().setIndicator(tabLayout, 20, 20); } }); }
阅读全文
0 0
- Android Tablayout+ViewPager使用及遇到的问题
- TabLayout+ViewPager遇到的问题
- android Viewpager+TabLayout+Fragment遇到的问题记录
- TabLayout关联ViewPager遇到的问题!
- TabLayout使用遇到的问题
- Android开发ViewPager的预加载和Fragment的销毁问题,以及tabLayout+ViewPager的使用
- Android TabLayout的使用(ViewPager添加标题)
- Android 开发之 TabLayout + ViewPager 的使用
- Android中TabLayout+ViewPager的简单使用
- Tablayout+Viewpager的使用
- TabLayout+ViewPager的使用
- Fragment 嵌套 Tablayout+ViewPager+fragment 遇到的问题
- android TabLayout+ViewPager配合使用
- TabLayout的简单使用(TabLayout+Fragment+ViewPager)
- TabLayout与ViewPager的使用
- TabLayout结合ViewPager的使用
- TabLayout+viewpager的简单使用
- TabLayout和ViewPager的使用
- Map四种遍历方式以及增删改查方法总结
- 双向循环链表
- 通过反编译深入理解Java String及intern
- 重写PrineArea解决打印空白页问题
- Hdu6048 Puzzle(2017多校第2场)
- Android Tablayout+ViewPager使用及遇到的问题
- ffmpeg 返回错误数字含义
- notepad源码windows下编译教程(基于版本7.4.2)
- Android动态获取权限
- Qt之QTcpServer/QTcpSocket简单收发信息
- 信用是个什么玩意
- icepdf去水印方法
- Linux 发送get和post请求测试接口
- 进程与控制