如何使用ViewPager更改TabLayout中第一个和最后一个选项卡的颜色?
我正在尝试执行循环ViewPager
。我在页面的第一个和最后一个位置添加了两个虚拟页面。我使用TabLayout
作为页面指示器,这就是为什么我想将第一个和最后一个选项卡设置为透明和禁用。 这是我TabLayout当前XML代码:如何使用ViewPager更改TabLayout中第一个和最后一个选项卡的颜色?
<android.support.design.widget.TabLayout
android:id="@+id/tabDots"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
app:tabBackground="@drawable/tab_selector"
app:tabGravity="center"
app:tabIndicatorHeight="0dp" />
这是TabLayout
提拉XML:
<item android:drawable="@drawable/tab_indicator_default"
android:state_selected="false"
android:state_focused="false"
android:state_pressed="false"/>
<item android:drawable="@drawable/tab_indicator_selected"
android:state_first="false"
android:state_last="false"
android:state_selected="true"/>
我试图state_first和state_last使用,但它不能正常工作。
这是一个欺骗手段,但我已经搜索了一些教程来实现循环ViewPager
。他们大多数需要至少4页,这是不适合我的情况,因为ViewPager
页面是动态的,可能少于4页。 请帮忙。
这是我的适配器类:
public class ShopPageAdapter extends PagerAdapter {
// This holds all the currently displayable views, in order from left to right.
private ArrayList<View> views = new ArrayList<View>();
@Override
public int getItemPosition(Object object) {
int index = views.indexOf(object);
if (index == -1)
return POSITION_NONE;
else
return index;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = views.get(position);
if(v.getParent() != null)
((ViewGroup) v.getParent()).removeView(v);
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
public int addView(View v) {
return addView(v, views.size());
}
public int addView(View v, int position) {
views.add(position, v);
return position;
}
public int removeView(ViewPager pager, View v) {
return removeView(pager, views.indexOf(v));
}
public int removeView(ViewPager pager, int position) {
pager.setAdapter(null);
views.remove(position);
pager.setAdapter(this);
return position;
}
public View getView(int position) {
return views.get(position);
}
}
tableLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition())
{
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
这似乎是你的答案格式是错误的。 但我想要做的是使第一个和最后一个选项卡“透明”,无论它被选中或不。我可以使用tabSelectedListener实现这个吗? –
嗯,我使用这种方法, 基本上我设置中间选项卡的图标和透明图标的第一个和最后一个选项卡在Selected和Unselected方法。并选择所有标签一次(它会回到第一页,因为最后一页是第一页的空白页)。谢谢您的帮助。 –
不客气。 – shenweiwei
你想沿着线的东西:
PagerAdapter pagerAdapter = new ShopPageAdapter(getActivity().getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
LinearLayout firstAndLastTabs = ((LinearLayout) tabLayout.getChildAt(0));
firstAndLastTabs.setEnabled(false);
firstAndLastTabs.getChildAt(0).setBackgroundColor(getResources()
.getColor(android.R.color.transparent));
firstAndLastTabs.getChildAt(0).setClickable(false);
firstAndLastTabs.getChildAt(tabLayout.getTabCount() - 1).setBackgroundColor(getResources().getColor(android.R.color.transparent);
firstAndLastTabs.getChildAt(tabLayout.getTabCount() - 1).setClickable(false);
第一个和最后一个选项卡的背景颜色将是透明的,点击这两个选项卡时,不会触发点击事件。
你可以为你的pagerAdapter类添加java代码吗?以及它被使用的地方(活动,片段等)。你可能需要编程 – chornge