当我在片段之间滑动时,tabindicator 不会在 tablayout 中从一个选项卡滑动到另一个选项卡。字体的突出显示也没有改变
tabindicator is not sliding from one to another tab in tablayout when I swipe between fragments. Highlighting of font is also not changing
public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_register);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup);
tabLayout.addTab(tabLayout.newTab().setText("Sign Up"));
tabLayout.addTab(tabLayout.newTab().setText("Sign in"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager pager =(ViewPager) findViewById(R.id.loginpager);
final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
pager.setAdapter(adapter);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
当我滑过片段时,标签的高亮没有改变,但是当我触摸时它工作正常 tabs.When 我触摸它们,标签指示器从左到右滑动很好,字体颜色为标签也看起来突出显示。
我认为问题出在这段代码中
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
我应该怎么做才能突出显示当前标签...
您不应该在 tablayout 上添加 Tab(),因为您已经设置了视图寻呼机适配器
执行以下操作,应该可以正常工作
public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_register);
final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager());
final ViewPager pager = (ViewPager) findViewById(R.id.loginpager);
pager.setAdapter(adapter);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(pager);
}
}
和SignInPagerAdapter
public class SigninPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return SingnUpFragment.newInstance()
case 1:
return SignInFragment.newInstance()
default:
return null;
}
}
@Override
public int getCount() {
//return the number of tabs you want in your tabLayout
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
//this is where you set the titles
switch(position) {
case 0:
return "Sign Up";
case 1:
return "Sign In";
}
return null;
}
更改选中和未选中选项卡的颜色。在您的 LoginRegister.java 文件中使用以下代码:
//tabLayout.setTabTextColors(unselectedTabColor, selectedTabColor)
tabLayout.setTabTextColors(Color.parseColor("#627179"), Color.parseColor("#BF4A32"));
我找到了我的解决方案。
tabLayout.setupWithViewPager(pager);
此方法轻松设置所有内容。
尝试在您的代码中添加:
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//THIS!!
if (mViewPager != null) {
mViewPager.setCurrentItem(tab.getPosition());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
它解决了我的问题。
补充说明。
最好的办法是最后调用 tabLayout.setupWithViewPager(viewPager)
。
至少,不要在调用 tabLayout.setupWithViewPager(viewPager)
之后立即调用 viewPager.clearOnPageChangeListeners()
或 viewPager.setOnPageChangeListener()
,因为这会删除 ViewPager
滚动时 TabLayout 使用的侦听器.
public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_register);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup);
tabLayout.addTab(tabLayout.newTab().setText("Sign Up"));
tabLayout.addTab(tabLayout.newTab().setText("Sign in"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager pager =(ViewPager) findViewById(R.id.loginpager);
final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
pager.setAdapter(adapter);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
当我滑过片段时,标签的高亮没有改变,但是当我触摸时它工作正常 tabs.When 我触摸它们,标签指示器从左到右滑动很好,字体颜色为标签也看起来突出显示。 我认为问题出在这段代码中
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
我应该怎么做才能突出显示当前标签...
您不应该在 tablayout 上添加 Tab(),因为您已经设置了视图寻呼机适配器
执行以下操作,应该可以正常工作
public class LoginRegister extends AppCompatActivity implements SignUpFragment.OnFragmentInteractionListener ,SignInFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_register);
final SigninPagerAdapter adapter = new SigninPagerAdapter(getSupportFragmentManager());
final ViewPager pager = (ViewPager) findViewById(R.id.loginpager);
pager.setAdapter(adapter);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_signup);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(pager);
}
}
和SignInPagerAdapter
public class SigninPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return SingnUpFragment.newInstance()
case 1:
return SignInFragment.newInstance()
default:
return null;
}
}
@Override
public int getCount() {
//return the number of tabs you want in your tabLayout
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
//this is where you set the titles
switch(position) {
case 0:
return "Sign Up";
case 1:
return "Sign In";
}
return null;
}
更改选中和未选中选项卡的颜色。在您的 LoginRegister.java 文件中使用以下代码:
//tabLayout.setTabTextColors(unselectedTabColor, selectedTabColor)
tabLayout.setTabTextColors(Color.parseColor("#627179"), Color.parseColor("#BF4A32"));
我找到了我的解决方案。
tabLayout.setupWithViewPager(pager);
此方法轻松设置所有内容。
尝试在您的代码中添加:
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//THIS!!
if (mViewPager != null) {
mViewPager.setCurrentItem(tab.getPosition());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
它解决了我的问题。
补充说明。
最好的办法是最后调用 tabLayout.setupWithViewPager(viewPager)
。
至少,不要在调用 tabLayout.setupWithViewPager(viewPager)
之后立即调用 viewPager.clearOnPageChangeListeners()
或 viewPager.setOnPageChangeListener()
,因为这会删除 ViewPager
滚动时 TabLayout 使用的侦听器.