TabLayout的使用進(jìn)階

在布局中添加一層外部布局,為了設(shè)置顏色


布局代碼


? ? android:id="@+id/layout"

? ? android:layout_width="match_parent"

? ? android:paddingTop="10dp"

? ? android:layout_height="wrap_content">

? ? ? ? android:id="@+id/infoTab"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="60dp"

? ? ? ? app:background="@color/mainWhite"

? ? ? ? app:tabTextAppearance="@android:style/TextAppearance.Small"

? ? ? ? app:tabGravity="fill"

? ? ? ? app:tabIndicatorGravity="top"

? ? ? ? app:tabIndicatorColor="@color/colorAccent"

? ? ? ? app:tabIndicatorHeight="2dp"

? ? ? ? app:tabSelectedTextColor="@color/colorAccent"

? ? ? ? app:tabTextColor="@color/itemTextColor"/>

? ? android:id="@+id/viewPager"

? ? android:layout_width="match_parent"

? ? android:layout_height="wrap_content"/>

因?yàn)関iewpager是嵌套在ScrollView中的,所以自定義了Viewpager

自定義的viewpager實(shí)現(xiàn)了懸停并且重置了高度,在切換的時(shí)候高度會(huì)動(dòng)態(tài)變化


import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import java.util.HashMap;

import java.util.LinkedHashMap;

/**

* 添加懸停的viewpager

*/

public class FinanceViewPagerextends ViewPager {

private int current;

? ? private int height =0;

? ? /**

? ? * 保存position與對(duì)于的View

*/

? ? private HashMapmChildrenViews =new LinkedHashMap();

? ? private boolean scrollble =true;

? ? public FinanceViewPager(Context context) {

super(context);

? ? }

public FinanceViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

? ? }

@Override

? ? protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

if (mChildrenViews.size() >current) {

View child =mChildrenViews.get(current);

? ? ? ? ? ? if (child !=null) {

child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

? ? ? ? ? ? ? ? height = child.getMeasuredHeight();

? ? ? ? ? ? }

}

heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

? ? ? ? super.onMeasure(widthMeasureSpec, heightMeasureSpec);

? ? }

public void resetHeight(int current) {

this.current = current;

? ? ? ? if (mChildrenViews.size() > current) {

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();

? ? ? ? ? ? if (layoutParams ==null) {

layoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, height);

? ? ? ? ? ? }else {

layoutParams.height =height;

? ? ? ? ? ? }

setLayoutParams(layoutParams);

? ? ? ? }

}

/**

? ? * 保存position與對(duì)于的View

*/

? ? public void setObjectForPosition(View view, int position) {

mChildrenViews.put(position, view);

? ? }

@Override

? ? public boolean onTouchEvent(MotionEvent ev) {

if (!scrollble) {

return true;

? ? ? ? }

return super.onTouchEvent(ev);

? ? }

public boolean isScrollble() {

return scrollble;

? ? }

public void setScrollble(boolean scrollble) {

this.scrollble = scrollble;

? ? }

}


然后就是代碼設(shè)置

private void initTab(int select) {

tabTitles.clear();

? ? tabTitles.add("1111");

? ? tabTitles.add("2222");

? ? tabFragments.clear();

? ? for (int i =0; i

Bundle bundle =new Bundle();

? ? ? ? switch (i) {

case 0:

Fragment1 holdFragment =new Fragment1?(viewPager, 0);

? ? ? ? ? ? ? ? holdFragment.setArguments(bundle);

? ? ? ? ? ? ? ? tabFragments.add(holdFragment);

break;

? ? ? ? ? ? case 1:

Fragment2 mFragment2=new Fragment2?(viewPager, 2);

mFragment2.setArguments(bundle);

? ? ? ? ? ? ? ? tabFragments.add(mFragment2);

break;

? ? ? ? }

}

if (tabAdapter ==null) {

tabAdapter =new FragAdapterUpTitle(getChildFragmentManager(), tabFragments, tabTitles);

? ? }

viewPager.setAdapter(tabAdapter);

? ? infoTab.setupWithViewPager(viewPager);

? ? viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

? ? ? ? public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

? ? ? ? public void onPageSelected(int position) {

viewPager.resetHeight(position);

? ? ? ? ? ? viewPager.setCurrentItem(position);

? ? ? ? ? ? index =infoTab.getTabAt(position).getPosition();

? ? ? ? }

@Override

? ? ? ? public void onPageScrollStateChanged(int state) {

}

});

? ? viewPager.resetHeight(0);

? ? infoTab.setBackgroundColor(SkinCompatResources.getColor(getContext(), R.color.mainWhite));

? ? infoTab.getTabAt(select).select();

? ? ScrollView.setScrollViewListener(new FinanceScrollView.ScrollViewListener() {

@Override

? ? ? ? public void onScrollChanged(FinanceScrollView scrollView, int l, int t, int oldl, int oldt) {

if (t >topRL.getHeight() &&infoTab.getParent() ==layout) {

layout.removeView(infoTab);

? ? ? ? ? ? ? ? rl_layout.addView(infoTab);

? ? ? ? ? ? }else if (t

rl_layout.removeView(infoTab);

? ? ? ? ? ? ? ? layout.addView(infoTab);

? ? ? ? ? ? }

}

});

}

最后重寫一個(gè)適配器,主要是為了動(dòng)態(tài)的修改tab的名字


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 瘦人碗子閱讀 131評(píng)論 0 0
  • 李光明 (稻盛哲學(xué)學(xué)習(xí)會(huì))打卡第34天 姓名:李光明 部門:業(yè)務(wù)部 組別:利他二組 【知~學(xué)習(xí)】 誦讀"活法",第...
    AnnaWellin閱讀 348評(píng)論 0 0
  • 寒風(fēng)中,你點(diǎn)起了一根煙 右手,食指與中指的相遇 也隔了一根黃白相間的坎兒 像極了我與你的距離 這么近,那么遠(yuǎn) 看著...
    植尚淇閱讀 294評(píng)論 0 4

友情鏈接更多精彩內(nèi)容