实现一个标签类似的功能很简单,下面功能清楚的注释了一下,有助与你的理解,有了它实现标签功能的具体修改都能是实现,好的代码都和大家分享,喜欢的记得关注呀!!!
下边是我实现的效果图,怎么样,不错吧
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/gray"
>
<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
app:tabTextAppearance="@style/MyTabLayoutTextAppearance"
/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:isScrollContainer="true"></android.support.v4.view.ViewPager>
</LinearLayout>
下面是主要实现代码:
import android.annotation.SuppressLint;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import com.lhss.mw.myapplication.R;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Fragment.Fragment_fenxi;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Fragment.Fragment_zonghe;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class PostActivityNew extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
private List<Fragment> list;
private MyAdapter adapter;
private String[] titles = {"综合", "分析"};
@SuppressLint("ResourceAsColor")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_postnew);
//实例化
viewPager = (ViewPager) findViewById(R.id.viewpager);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
//页面,数据源
list = new ArrayList<>();
list.add(new Fragment_zonghe());
list.add(new Fragment_fenxi());
//ViewPager的适配器
adapter = new MyAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
//绑定
tabLayout.setupWithViewPager(viewPager);
//设置默认颜色和选中颜色
tabLayout.setTabTextColors(Color.BLACK,getResources().getColor(R.color.gold));
//设置下滑线颜色
tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.gold));
//设置下划线的长度
setIndicator(tabLayout,15,15);
}
//设置分割线距离
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();
}
}
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
//重写这个方法,将设置每个Tab的标题
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
}
下边给大家推荐一个工具类,如果不想让viewpage滑动,就可以用这个工具类
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class NoScrollViewPager extends ViewPager {
//true 是不可滑动 false 是可滑动
private boolean noScroll = true;
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public NoScrollViewPager(Context context) {
super(context);
}
public void setNoScroll(boolean noScroll) {
this.noScroll = noScroll;
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
/* return false;//super.onTouchEvent(arg0); */
if (noScroll)
return false;
else
return super.onTouchEvent(arg0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (noScroll)
return false;
else
return super.onInterceptTouchEvent(arg0);
}
@Override
public void setCurrentItem(int item, boolean smoothScroll) {
super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
super.setCurrentItem(item);
}
}