91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于VerticalTabLayout的使用

發布時間:2020-05-16 17:47:26 來源:網絡 閱讀:3409 作者:駿駿Daniel 欄目:移動開發

現在很多安卓移動端都會用到TabLayout+ViewPager的搭配,原生的只有橫排設計的,這里介紹個豎的控件VerticalTabLayout。
關于VerticalTabLayout的使用
關于VerticalTabLayout的使用
我用的是AS,在gradle中引入compile 'q.rorbin:VerticalTabLayout:1.2.5'即可

找到這個類q.rorbin.verticaltablayout.VerticalTabLayout

setTabHeight 設置TAB高度
setIndicatorColor 設置選中TAB的指示顏色(我的是上圖白色)
setupWithViewPager 綁定ViewPager
getTabAt(int)獲得第幾個tab 獲得的是一個 自定義類 TabView 繼承了 FrameLayout

單單靠API里的方法可能無法滿足我們的需求,可以自己建個類繼承VerticalTabLayout

像我里面要實現白色橢圓居中和藍色靠右的指示形狀要重寫setIndicatorGravity ()方法

    protected void setIndicatorGravity () {

        switch (mIndicatorGravity) {
            case Gravity.LEFT:
                mIndicatorX = 0;
                if ( mLastWidth != 0 ) mIndicatorWidth = mLastWidth;
                setPadding(mIndicatorWidth, 0, 0, 0);
                break;

            case Gravity.RIGHT:
                if ( mLastWidth != 0 ) mIndicatorWidth = mLastWidth;
                setPadding(0, 0, mIndicatorWidth, 0);
                break;

            case Gravity.FILL:
                mIndicatorX = 0;
                setPadding(0, 0, 0, 0);
                break;

            case Gravity.CENTER_HORIZONTAL:
                setPadding(0, 0, 0, 0);
                break;
        }

        post(new Runnable() {
            @Override
            public void run () {

                switch (mIndicatorGravity) {
                    case Gravity.RIGHT:
                        mIndicatorX = getWidth() - mIndicatorWidth;
                        break;

                    case Gravity.FILL:
                        mLastWidth = mIndicatorWidth;
                        mIndicatorWidth = getWidth();
                        break;

                    case Gravity.CENTER_HORIZONTAL:
                        mIndicatorX = (getWidth() - mIndicatorWidth) / 2;
                        break;
                }

                invalidate();
            }
        });
    }

在addTab (TabView tabView) 添加 tabView 時 在落焦發生改變時改變 Indicator

@Override
public void addTab (TabView tabView) {

    if ( tabView != null ) {

        tabView.setBackground(null);
        addTabWithMode(tabView);

        tabView.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange (View v, boolean hasFocus) {

                int position = mTabStrip.indexOfChild(v);

                if ( hasFocus ) {
                    chgIndicator(true);
                    setTabSelected(position);
                }

                if ( null != mTabFocusChangeListener ) {
                    mTabFocusChangeListener.onFocusChange(v, hasFocus, position);
                }
            }
        });

                    。。。

    } else {
        throw new IllegalStateException("tabview can't be null");
    }
}

public void chgIndicator (boolean hasFocus) {
    mColorIndicator = hasFocus ? Color.WHITE : ComUtils.getClr(R.color.blue_0099e5);
    mIndicatorWidth = hasFocus ? ViewUtils.getCorrectWidth(438) : ViewUtils.getCorrectWidth(6);
    mIndicatorCorners = hasFocus ? ViewUtils.getCorrectWidth(48) : 0;
    setIndicatorGravity(hasFocus ? Gravity.CENTER_HORIZONTAL : Gravity.RIGHT);
}

拙見差不多介紹完了,大佬勿噴

另外說個小問題,我開發中測試給我提的
在第一次進這個頁面的時候,切換TAB會閃現1次藍色背景再切換就不會了,但是重新進頁面會復現
后來發現在TabView初始化的時候原來會給他設置個默認背景setDefaultBackground();

public LoginTabView (Context context) {
    super(context);
    mContext = context;
    mTabIcon = new TabIcon.Builder().build();
    mTabTitle = new TabTitle.Builder().build();
    mTabBadge = new TabBadge.Builder().build();
    initView();
    int[] attrs;
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {
        attrs = new int[]{android.R.attr.selectableItemBackgroundBorderless};
    } else {
        attrs = new int[]{android.R.attr.selectableItemBackground};
    }
    TypedArray a = mContext.getTheme().obtainStyledAttributes(attrs);
    mDefaultBackground = a.getDrawable(0);
    a.recycle();
    setDefaultBackground();
}

把這段去掉即可,或是在addTabView時候tabView.setBackground(null);我為了安全起見用的是后者

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嫩江县| 来凤县| 黎城县| 襄垣县| 聂拉木县| 巨野县| 南部县| 梓潼县| 北票市| 石景山区| 聊城市| 荃湾区| 潮州市| 咸丰县| 赫章县| 凭祥市| 奈曼旗| 云阳县| 威海市| 广元市| 资阳市| 洛扎县| 噶尔县| 额尔古纳市| 儋州市| 澄城县| 辉县市| 宝清县| 镇江市| 乌鲁木齐县| 葫芦岛市| 东明县| 盐城市| 梁山县| 吴忠市| 酉阳| 陈巴尔虎旗| 绥化市| 汉沽区| 米林县| 北海市|