如果不清楚TabLayout和ViewPager是怎样结合使用的,可以参考下这篇文章:TabLayout和ViewPager结合使用http://gundumw100.iteye.com/blog/2242331 。有些时候或许有需求,要求TabLayout或者ViewPager在某些情况下不能滑动,这个时候就需要我们能主动控制TabLayout和ViewPager什么可以滑动,什么时候不可以滑动。
1、先要自定义一个可以自由控制viewpager是否能滑动的viewpager:
package com.example.yk.tabviewpagertest;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Created by yk on 2016/12/7.
*/
public class NoScrollViewPager extends ViewPager{
public void setNeedScroll(boolean needScroll) {
isNeedScroll = needScroll;
}
private boolean isNeedScroll=true;
public NoScrollViewPager(Context context) {
super(context);
}
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(isNeedScroll){
return super.onTouchEvent(ev);
}else {
return false;
}
}
// @Override
// public boolean onInterceptTouchEvent(MotionEvent ev) {
// return super.onInterceptTouchEvent(ev);
// return false;
// }
}
2、自由控制TabLayout是否可以点击:
public void setTabLayoutCanClick(boolean canClick){
LinearLayout tabStrip= (LinearLayout) tabLayout.getChildAt(0);
for (int i = 0; i < tabStrip.getChildCount(); i++) {
View tabView = tabStrip.getChildAt(i);
if(tabView !=null){
tabView.setClickable(canClick);
}
}
}
整体代码:
MainActivity中代码:
package com.example.yk.tabviewpagertest;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private NoScrollViewPager viewPager;
private String[] mTabTexts;
private ArrayList<Fragment> mFragmentsList;
private PurFragmentPageAdapter pageAdapter;
private Button btnCan,btnCanNot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
viewPager = (NoScrollViewPager) findViewById(R.id.viewpager);
btnCan = (Button) findViewById(R.id.btn_can);
btnCanNot= (Button) findViewById(R.id.btn_can_not);
mTabTexts = new String[]{"定量", "计件", "散斤"};
mFragmentsList = new ArrayList<>();
mFragmentsList.add(new FirstFragment());
mFragmentsList.add(new SecondFragment());
mFragmentsList.add(new ThirdFragment());
for (int i = 0; i < mTabTexts.length; i++) {
tabLayout.addTab(tabLayout.newTab().setText(mTabTexts[i]));
}
tabLayout.setTabMode(TabLayout.MODE_FIXED);
pageAdapter = new PurFragmentPageAdapter(getSupportFragmentManager(), mFragmentsList, mTabTexts);
viewPager.setAdapter(pageAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(1);//设置默认选中某个tab
btnCanNot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setNeedScroll(false);
setTabLayoutCanClick(false);
}
});
btnCan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setNeedScroll(true);
setTabLayoutCanClick(true);
}
});
}
public void setTabLayoutCanClick(boolean canClick){
LinearLayout tabStrip= (LinearLayout) tabLayout.getChildAt(0);
for (int i = 0; i < tabStrip.getChildCount(); i++) {
View tabView = tabStrip.getChildAt(i);
if(tabView !=null){
tabView.setClickable(canClick);
}
}
}
}
自定义viewPager中的代码和上面的一样,就不赘述了。
实现的效果图:
参考资料:
TabLayout禁止选择:http://blog.csdn.net/chen195822080/article/details/52982592?locationNum=7&fps=1