FragmentPagerAdapter+ViewPager 實現TabLayout
版權聲明:轉載請保留原文連結及作者
最近剛好在寫UI順便記錄一下
在安卓5.0有新增了TabLauout
但他並不能滿足很多時候想顯示的樣子
所以使用V4
下的FragmentPagerAdapter
來實現.請記得都要import v4
否則會報錯
呈現的效果如下
效果
程式碼
- 程式碼分成四類
FragmentPagerAdapter
ArrayList<Fragment>()
- 初始化三個布局
- 更改點擊的布局屬性
布局XML
- 從上面的效果可以看的出來
- 沒選重的狀況下其他兩個字體大小要一置 選重的要變大
- 下底線要與字體長度一樣
程式碼如下
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="55dp"android:paddingLeft="16dp"android:paddingRight="16dp"android:orientation="horizontal"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="horizontal"><LinearLayoutandroid:id="@+id/id_tab_trend"android:layout_width="0dp"android:layout_height="wrap_content"android:gravity="center"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/id_tab_tv_trend"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textColor="#D6EDC6" /><ImageViewandroid:id="@+id/id_tab_trend_img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/tabline"android:layout_gravity="center"android:layout_marginTop="5dp"/></LinearLayout><LinearLayoutandroid:id="@+id/id_tab_surrounding"android:layout_width="0dp"android:layout_height="wrap_content"android:gravity="center"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/id_tab_tv_sourrounding"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textColor="#D6EDC6" /><ImageViewandroid:id="@+id/id_tab_surrounding_img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/tabline"android:layout_gravity="center"android:layout_marginTop="5dp"/></LinearLayout><LinearLayoutandroid:id="@+id/id_tab_appliances"android:layout_width="0dp"android:layout_height="wrap_content"android:gravity="center"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/id_tab_tv_appliances"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textColor="#D6EDC6" /><ImageViewandroid:id="@+id/id_tab_appliances_img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/tabline"android:layout_gravity="center"android:layout_marginTop="5dp"/></LinearLayout></LinearLayout></LinearLayout>在一個
LinearLayout
裡面 再放三個`LinearLayout``- 按照比例分配`android:layout_weight=”1”``
- 點擊後在程式碼將點擊的
layout_weight
改成你要的比例在把字體放大
Fragment
|
|
FragmentPagerAdapter
|
|
重置
- 這邊來判斷字的寬度 來依照讀取的寬度來設定線的長度
- 這邊只貼其中一組 textview ImageView 請在自行補上其他的1234567891011private void resetColor() {mTvTrend.setTextColor(getResources().getColor(R.color.tab_not_selectedl_Color));mTvTrend.setTextSize(NOT_SELECTED);mTvTrend.setText(one);mTabTrend.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayoutCompat.LayoutParams.WRAP_CONTENT, 1.0f));mTabtrendImg.setBackgroundResource(R.drawable.tabline);mTvTrend.measure(0, 0);LinearLayout.LayoutParams trend = new LinearLayout.LayoutParams(mTvTrend.getMeasuredWidth(), LinearLayout.LayoutParams.WRAP_CONTENT);mTabtrendImg.setLayoutParams(trend);
點擊
- 在點擊的時候先呼叫一次
resetColor();
- 在設定布局比例 文字大小
|
|
|
|
滑動
- 別忘了上面寫的ViewPage事件
|
|
|
|
結尾
- 程式碼可以在寫一個
class
來去放 這樣會比較好維護一點 - 下底線圖片要改成
.9
會比較好一點