欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PagerSlidingTab定制自己的樣式

看到很多的APP,都有PagerSlidingTab這個(gè)控件,而且風(fēng)格都不一樣,所以我決定研究一番。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比南華網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南華網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南華地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。


1.老師給了個(gè)控件PagerSlidingTab,假如Tab只有2個(gè)的時(shí)候,標(biāo)題并沒有占滿全屏。那怎改?

  PagerSlidingTab定制自己的樣式

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í)就是對我所說的這個(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è)置,上面

  的屬性也都有對應(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)塊就不顯示了,求路過的幫忙解答一下??? 

   

本文題目:PagerSlidingTab定制自己的樣式
文章來源:http://aaarwkj.com/article22/gdesjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、App開發(fā)、、全網(wǎng)營銷推廣、電子商務(wù)軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
国产一区二区精品久久岳√| 美女在线免费观看av| 国产欧美日韩一区二区三区不卡 | 国产一级黄色性生活片| 国产综合永久精品日韩鬼片| 久久亚洲精品综合一区| 日韩精品在线观看天堂| av剧情在线观看免费| 999久久免费精品国产| 成人爱爱在线视频免费观看| 欧美日韩性视频播放器| 日本人妻内射一区二区| 未满十八勿进黄网观看| 丰满少妇被激烈的插进去| 青青草原在线视频观看| 四虎免费在线视频观看| 日韩色欧美色国产精品| 人妻黄色这里只有精品| 在线国产精品中文字幕 | 欧美日韩国产精品综合| 91久久精品国产一区| 亚洲国产精品自拍视频| 91狠狠综合久久精品| 九九热在线视频观看最新| 亚洲第一国产综合自拍| 成人国产在线欧美精品| 先锋av一区二区三区| 国产精品深夜在线观看| 色综合色综合色综合色综合| 亚洲男人天堂黄色av| 亚洲永久精品天码野外| 国产精品传媒在线视频| 国产黄片大秀在线观看| 人妻操人人妻中出av| 天堂av五月在线观看| 久久久久久精品妇女| 欧美成人精品三级在线网站| 国产三级精品三级专区| 亚洲熟妇一区二区在线| 18禁在线免费观看网站| 亚洲综合偷拍欧美一区色|