通過反射改變toolbar

1琴锭、改變toolbar的顏色

當(dāng)滾動條再頂部的時候欲芹,toobar透明蝌借,再發(fā)生滾動的時候昔瞧,toobar逐漸變成白色,效果如下:

toobar變色

關(guān)于toobar

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#00ffffff"
        app:elevation="0dp"
        app:navigationIcon="@drawable/back_white"/>

其中background設(shè)為白色全透菩佑,navigationIcon圖片也是白色

實(shí)現(xiàn)這個效果硬爆,有三點(diǎn)需要注意:

1、獲得toobar下的navigationIcon(mNavButtonView)、title(mTitleTextView)

反射

    private void getToolBarView() {
        Class<? extends Toolbar> c = toolbar.getClass();
        try {
            Field field=c.getDeclaredField("mNavButtonView");
            Field fieldTextView=c.getDeclaredField("mTitleTextView");
            field.setAccessible(true);
            fieldTextView.setAccessible(true);
            Object obj = null;//拿到對應(yīng)的Object
            Object objTextView = null;//拿到對應(yīng)的Object
            try {
                obj = field.get(toolbar);
                if(obj ==null)return;
                if(obj instanceof ImageButton) {
                    mNavButtonView = (ImageButton) obj;
                    mNavButtonView.setImageTintMode(PorterDuff.Mode.ADD);
                }
                objTextView=fieldTextView.get(toolbar);
                if(objTextView==null) return;
                if(objTextView instanceof TextView){
                    mTitleTextView= (TextView) objTextView;
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }
2、改變navigationIcon的顏色

在布局文件可以使用android:tint于置,在代碼中對應(yīng)的方法是imageview.setColorFilter(Color)。

3袜蚕、動態(tài)改變toobar的背景色
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            //totalDis,再y軸移動的距離
            totalDis+=dy;
            //dis=header的高度(gif中綠色的那一塊)-toobar的高度
            offset=totalDis*1.0f/dis;
            if(totalDis>=dis){
                offset=1;
            }
            //動態(tài)改變toobar的背景色
            toolbar.setBackgroundColor(Color.argb((int) (offset * 255), 255, 255, 255));
            mNavButtonView.setColorFilter(Color.argb(255, (int) ((1 - offset) * 255), (int) ((1 - offset) * 255), (int) ((1 - offset) * 255)));
            if(mTitleTextView!=null){
                mTitleTextView.setTextColor(Color.argb(255, (int) ((1-offset) * 255),  (int) ((1-offset) * 255),  (int) ((1-offset) * 255)));
            }
        }
    });

</br>
參考:
MaterialDesign文字縮放并入Toolbar效果的一種實(shí)現(xiàn)绢涡、使用Material Design Tint和視圖詳解

</br>

2牲剃、toolbar居中

1、在XML中設(shè)置

toolbar的title默認(rèn)是居左的雄可,可以在toolbar里放置一個居中的子view凿傅,如下:

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:contentInsetStart="0dp"
        app:title="">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:text="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"/>
        </FrameLayout>
    </android.support.v7.widget.Toolbar>

注意:contentInsetStart默認(rèn)是16dp,這里在布局文件中將contentInsetStart修改為0dp

沒有設(shè)置contentInsetStart
設(shè)置了contentInsetStart

默認(rèn)contentInsetStart=16dp数苫,在樣式Base.Widget.AppCompat.Toolbar中查看:

toobar的默認(rèn)樣式

也可以在配置文件中修改contentInsetStart聪舒,如下:


    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
        <item name="toolbarStyle">@style/myToolBar</item>
    </style>

    <style name="myToolBar" parent="Base.Widget.AppCompat.Toolbar">
        <item name="contentInsetStart">0dp</item>
    </style>
2、自定義toolbar

Android官方Toolbar自定義高度最靠譜的解決辦法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虐急,一起剝皮案震驚了整個濱河市箱残,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖被辑,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燎悍,死亡現(xiàn)場離奇詭異,居然都是意外死亡盼理,警方通過查閱死者的電腦和手機(jī)谈山,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宏怔,“玉大人勾哩,你說我怎么就攤上這事【儆矗” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵迅矛,是天一觀的道長妨猩。 經(jīng)常有香客問我,道長秽褒,這世上最難降的妖魔是什么壶硅? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮销斟,結(jié)果婚禮上庐椒,老公的妹妹穿的比我還像新娘。我一直安慰自己蚂踊,他們只是感情好约谈,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犁钟,像睡著了一般棱诱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涝动,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天迈勋,我揣著相機(jī)與錄音,去河邊找鬼醋粟。 笑死靡菇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的米愿。 我是一名探鬼主播厦凤,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼育苟!你這毒婦竟也來了泳唠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宙搬,失蹤者是張志新(化名)和其女友劉穎笨腥,沒想到半個月后拓哺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脖母,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年士鸥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆级。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡烤礁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肥照,到底是詐尸還是另有隱情脚仔,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布舆绎,位于F島的核電站鲤脏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吕朵。R本人自食惡果不足惜猎醇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望努溃。 院中可真熱鬧硫嘶,春花似錦、人聲如沸梧税。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽第队。三九已至曹鸠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斥铺,已是汗流浹背彻桃。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晾蜘,地道東北人邻眷。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像剔交,于是被迫代替她去往敵國和親肆饶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容