看到很多的APP,都有PagerSlidingTab這個(gè)控件,而且風(fēng)格都不一樣,所以我決定研究一番。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供鳩江網(wǎng)站建設(shè)、鳩江做網(wǎng)站、鳩江網(wǎng)站設(shè)計(jì)、鳩江網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、鳩江企業(yè)網(wǎng)站模板建站服務(wù),10多年鳩江做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。1.老師給了個(gè)控件PagerSlidingTab,假如Tab只有2個(gè)的時(shí)候,標(biāo)題并沒有占滿全屏。那怎改?
2.如果想要有自己的效果,那么就得理解源碼,修改源碼。
源碼怎么看:不可能全部看完,抓住主要的,自己關(guān)心的地方。否則看源碼就是一件痛苦的事情。
1)首先看PagerSlidingTab這個(gè)類的繼承關(guān)系,發(fā)現(xiàn)它繼承自HorizontalScrollView
-->FrameLayout-->ViewGroup。
2)看PagerSlidingTab構(gòu)造函數(shù),會(huì)發(fā)現(xiàn)標(biāo)題其實(shí)是水平的LinearLayout,源碼中用
tabsContainer表示。
3)我想,標(biāo)題沒有居中,也就是子View沒有添加權(quán)重。于是Ctrl + F,在類里搜索tabsContainer。
發(fā)現(xiàn)addTextTab和addIconTab兩個(gè)方法中tabsContainer會(huì)有添加子View,于是Ctrl + F,再搜索
addTextTab方法,找到方法在哪里被調(diào)用。
for (int i = 0; i < tabCount; i++) { if (pager.getAdapter() instanceof IconTabProvider) { addIconTab(i, ((IconTabProvider) pager.getAdapter()).getPageIconResId(i)); } else { addTextTab(i, pager.getAdapter().getPageTitle(i).toString()); } }
發(fā)現(xiàn)和ViewPager的適配器有關(guān),而平常我們會(huì)使用PagerAdapter,所以addTextTab 會(huì)被調(diào)用。
4)于是在 addTextTab 方法添加子View的時(shí)候?yàn)樽覸iew添加了權(quán)重
private void addTextTab(final int position, String title) { TextView tab = new TextView(getContext()); tab.setText(title); tab.setFocusable(true); tab.setGravity(Gravity.CENTER); tab.setSingleLine(); //我給子View添加的權(quán)重 tab.setLayoutParams(new LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT,1.0f)); tab.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pager.setCurrentItem(position); } }); tabsContainer.addView(tab); }
5)但是遺憾的是,運(yùn)行結(jié)果還是一個(gè)樣。那怎么辦?
后來在onMeasure方法中發(fā)現(xiàn)了驚天大秘密:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (!shouldExpand || MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED) { return; } int myWidth = getMeasuredWidth(); int childWidth = 0; for (int i = 0; i < tabCount; i++) { childWidth += tabsContainer.getChildAt(i).getMeasuredWidth(); } if (!checkedTabWidths && childWidth > 0 && myWidth > 0) { if (childWidth <= myWidth) { for (int i = 0; i < tabCount; i++) { tabsContainer.getChildAt(i).setLayoutParams(expandedTabLayoutParams); } } checkedTabWidths = true; } }
發(fā)現(xiàn)在此方法里其實(shí)就是對(duì)我所說的這個(gè)問題的控制,shouldExpand 就是控制標(biāo)題是否平均分配
而這個(gè)屬性在XML或者set方法里都可以設(shè)置。默認(rèn)是false,不會(huì)平均分配。
雖然繞來繞去,改個(gè)屬性就能解決問題,但還是收獲不少。
3.PagerSlidingTab的其他屬性
<declare-styleable name="PagerSlidingTab">
<attr name="indicatorColor" format="color" /> 指針也就是滑動(dòng)塊的顏色
<attr name="underlineColor" format="color" /> 滑動(dòng)條與View之間那條線顏色
<attr name="underlineHeight" format="dimension" /> 滑動(dòng)條與View之間那條線高度
<attr name="dividerColor" format="color" /> 滑動(dòng)塊之間豎直分隔線
<attr name="indicatorHeight" format="dimension" /> 滑動(dòng)塊的高度
<attr name="pst_dividerPadding" format="dimension" />
<attr name="tabPaddingLeftRight" format="dimension" />
<attr name="scrollOffset" format="dimension" />
<attr name="tabBackground" format="reference" />
<attr name="shouldExpand" format="boolean" /> 導(dǎo)航條是否平均分配寬度
<attr name="pst_textAllCaps" format="boolean" />
</declare-styleable>
還有和字體顏色和大小相關(guān)的屬性,并沒有寫在attrs.xml中,不過可以通過set方法進(jìn)行設(shè)置,上面
的屬性也都有對(duì)應(yīng)的set方法。
源碼中
tab.setTextColor(i==0?getResources().getColor(R.color.slidingtab_indicatorcolor):tabTextColor);
就是設(shè)置字體的顏色,即當(dāng)前導(dǎo)航條字體顏色與其它導(dǎo)航條字體顏色。
另外有一點(diǎn)讓人費(fèi)解的就是導(dǎo)航條的背景色怎么設(shè)置的?
app:tabBackground="@color/gray"
只要給導(dǎo)航條添加了背景色,下面的滑動(dòng)塊就不顯示了,求路過的幫忙解答一下???
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:PagerSlidingTab定制自己的樣式-創(chuàng)新互聯(lián)
鏈接地址:http://jinyejixie.com/article12/deoegc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、虛擬主機(jī)、定制開發(fā)、App設(shè)計(jì)、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容