一篇文章學(xué)會(huì)Coordinatorlayout+AppbarLayout

現(xiàn)如今骇窍,折疊式布局在App中相當(dāng)常見,給人一種科技感,充滿良好的用戶體驗(yàn)枫吧。Coordinatorlayout+AppbarLayout+CollapsingToolbarLayout這三個(gè)臭皮匠聯(lián)合起來(lái)用千變?nèi)f化,啊宇色,我重來(lái)沒(méi)有見過(guò)如此超凡脫俗之效果九杂。
網(wǎng)上大多來(lái)不來(lái)就將這仨揉在一起,布局也是直接全部嵌套完成搬上來(lái)宣蠕,但是你真的理解它們之間的協(xié)作關(guān)系嗎例隆?相互聯(lián)動(dòng)的原理是什么呢?一個(gè)個(gè)控件都沒(méi)整明白寫出這個(gè)功能也沒(méi)有意義呀抢蚀。那我就一個(gè)一個(gè)拆開來(lái)講镀层,分別來(lái)個(gè)功能,再一個(gè)接一個(gè)拼接皿曲。接下來(lái)鹿响,讓我們一起走進(jìn)它們的內(nèi)心世界。

github代碼直通車: https://github.com/18380438200/CoordinatorlayoutFull
先上效果圖:

giphy的副本.gif

博客講解demo地址:https://github.com/18380438200/MDView

ToolBar(因?yàn)樯婕暗焦榷觯惨徊⒅v解)

從Android3.0后出現(xiàn)ActionBar惶我,但是這效果,誰(shuí)用誰(shuí)知道啊博投。顏色不好看不說(shuō)绸贡,布局也是無(wú)法訂制,都不如自定義ActionBar的好√拢可見我的另一篇自定義[Actionbar] http://www.reibang.com/p/43b51e1062f1捧挺。
使用方式:
1.首先在Activity主題里面將默認(rèn)Actionbar改為NoActionbar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

2.綁定toolbar ,setSupportActionBar(toolbar) 設(shè)置toolbar為標(biāo)題欄
3.設(shè)置常用屬性:

    toolbar.setNavigationIcon(int resId);
    toolbar.setLogo(int resId);
    toolbar.setTitle("");
    toolbar.setSubtitle("");
    toolbar.setOnMenuItemClickListener(Toolbar.OnMenuItemClickListener listener);

4.引用菜單

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //引入options菜單
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }

5.在menu文件夾中設(shè)置菜單

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/menu_1"
          android:title="菜單1"
          android:icon="@mipmap/make_music_voice_changer_female"
          app:showAsAction="collapseActionView"/>

    <item android:id="@+id/menu_2"
        android:title="菜單2"
        android:icon="@mipmap/make_music_voice_changer_female"
        app:showAsAction="collapseActionView"/>

    <item android:id="@+id/menu_3"
        android:title="菜單3"
        android:icon="@mipmap/make_music_voice_changer_female"
        app:showAsAction="collapseActionView"/>

    <item android:id="@+id/menu_4"
        android:title="菜單4"
        android:icon="@mipmap/make_music_voice_changer_female"
        app:showAsAction="collapseActionView"/>
</menu>

或者直接在布局中添加子view使用

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >

                <TextView
                    android:id="@+id/tv1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="返回"
                    android:textSize="13sp"
                    android:textColor="@android:color/white" />

                <TextView
                    android:id="@+id/tv2"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="right"
                    android:layout_centerHorizontal="true"
                    android:layout_marginRight="6dp"
                    android:gravity="center"
                    android:padding="4dp"
                    android:textColor="#fff"
                    android:textSize="14sp"
                    android:text="菜單"/>
            </android.support.v7.widget.Toolbar>
showAsAction屬性
  1. ifRoom 會(huì)顯示在Item中尿瞭,空間不足會(huì)將后面item收起來(lái)闽烙,如果已經(jīng)有4個(gè)或者4個(gè)以上的Item時(shí)會(huì)隱藏在溢出列表中。
  2. never 永遠(yuǎn)不會(huì)顯示声搁。只會(huì)在藏出列表中顯示黑竞,而且只顯示標(biāo)題,所以在定義item的時(shí)候疏旨,最好把標(biāo)題都帶上很魂。
  3. always 無(wú)論是否超出空間,總會(huì)顯示檐涝。
  4. withText withText值示意Action bar要顯示文本標(biāo)題遏匆。Action bar會(huì)盡可能的顯示這個(gè)標(biāo)題,但是谁榜,如果圖標(biāo)有效并且受到Action bar空間的限制幅聘,文本標(biāo)題有可能顯示不全。
  5. collapseActionView 聲明了這個(gè)操作視窗應(yīng)該被折疊到一個(gè)按鈕中窃植,當(dāng)用戶選擇這個(gè)按鈕時(shí)喊暖,這個(gè)操作視窗展開。否則撕瞧,這個(gè)操作視窗在默認(rèn)的情況下是可見的陵叽,并且即便在用于不適用的時(shí)候,也要占據(jù)操作欄的有效空間丛版。
    例如效果:


    ifroom的效果

    collapseActionView的效果

Coordinatorlayout :

定義:is a super-powered Framelayout
是一個(gè)超級(jí)有力量的爸爸巩掺,官方給的定義就足以證明它的強(qiáng)大。
作用:協(xié)調(diào)子view的相互關(guān)系页畦,比如位置胖替、大小,就像有幾個(gè)調(diào)皮孩子的爸爸豫缨,要管管孩子的行為独令。

Behavior:


Behavior的來(lái)源

打開Coordinatorlayout看,Behavior是CoordinatorLayout的一個(gè)泛型抽象內(nèi)部類(這么長(zhǎng)累不累呀)好芭,所以給子view添加layout_behavior屬性是來(lái)自于它燃箭。

我寫了一個(gè)例子來(lái)理解CoordinatorLayout的工作原理:


這是一個(gè)大叔跟隨女孩的故事
<android.support.design.widget.CoordinatorLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coordinatorLayout"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.example.md.mdview.CoordinatorLayoutActivity">

    <View
        android:id="@+id/view_girl"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_marginLeft="200dp"
        android:background="@mipmap/make_music_voice_changer_female" />

    <View
        android:id="@+id/view_uncle"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@mipmap/make_music_voice_changer_uncle"
        app:layout_behavior="com.example.md.mdview.RunBehavior"/>
</android.support.design.widget.CoordinatorLayout>

布局:兩個(gè)子view,操作viewgirl舍败,viewuncle也會(huì)相應(yīng)跟著走招狸,這就要寫一個(gè)聯(lián)動(dòng)關(guān)系敬拓,用自定義Behavior實(shí)現(xiàn)

public class RunBehavior extends CoordinatorLayout.Behavior<View>{

    public RunBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        int top = dependency.getTop();
        int left = dependency.getLeft();

        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
        params.topMargin = top - 400;
        params.leftMargin = left;
        child.setLayoutParams(params);
        return true;
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
        return true;
    }
}

public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) 方法:
根據(jù)條件過(guò)濾判斷返回值,返回true聯(lián)動(dòng)裙戏,返回flase不聯(lián)動(dòng)乘凸,即behavior不生效

public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency)
當(dāng) dependency這個(gè)哥哥發(fā)生變化時(shí), 另一個(gè)child弟弟也要跟著去玩
一個(gè)view根據(jù)另一個(gè)view的變化而變化累榜, dependency被 child監(jiān)聽
功能是child的y值永遠(yuǎn)比dependency大400像素(廢話营勤,還用說(shuō)嗎)

app:layout_behavior="com.example.md.mdview.RunBehavior"

這里一定要寫上帶參數(shù)的構(gòu)造方法,因?yàn)閏oordinatorlayout是根據(jù)反射(所以是包名.類名路徑)獲取這個(gè)behavior壹罚,是從這個(gè)構(gòu)造方法獲得對(duì)象的葛作,否則會(huì)報(bào)


image.png
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                params.leftMargin = (int) (event.getX() - viewGirl.getMeasuredWidth() / 2);
                params.topMargin = (int) (event.getY() - viewGirl.getMeasuredHeight() / 2);
                viewGirl.setLayoutParams(params);
                break;
            case MotionEvent.ACTION_MOVE:
                params.leftMargin = (int) (event.getX() - viewGirl.getMeasuredWidth() / 2);
                params.topMargin = (int) (event.getY() - viewGirl.getMeasuredHeight() / 2);
                viewGirl.setLayoutParams(params);
                break;
        }
        return true;
    }

最后是在界面監(jiān)聽手指的位置,給viewGirl設(shè)置手指的位置渔嚷,viewgril變化了,viewuncle也就隨之變化了稠曼。

好形病,在會(huì)了Coordinatorlayout的用法,最外層父布局有了霞幅,該添加兩個(gè)子view了漠吻。這里里面分別加入AppbarLayout和NestedScrollView作子view,給NestedScrollView加上behavior,就可以讓AppbarLayout跟隨NestedScrollView的Behavior聯(lián)動(dòng)司恳。Android已經(jīng)自帶了app:layout_behavior="@string/appbar_scrolling_view_behavior"途乃,只要滾動(dòng)發(fā)生,就會(huì)給自己的子view(if
instance of Appbarlayout)添加滾動(dòng)事件扔傅。不明白這倆控件緊接著看后面講解耍共。

當(dāng)前布局變?yōu)椋?/p>

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#0e932e"
                app:layout_collapseMode="pin"/>
        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textColor="#000"
            android:padding="10dp"
            android:text=""/>
    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

NestedScrollView (viewgirl的角色)

NestedScrolling機(jī)制能夠讓父View和子View在滾動(dòng)式進(jìn)行配合,其基本流程如下:

當(dāng)子view開始滾動(dòng)之前猎塞,可以通知父View试读,讓其先于自己進(jìn)行滾動(dòng);
子View自己進(jìn)行滾動(dòng)荠耽;子view滾動(dòng)之后钩骇,還可以通知父view繼續(xù)滾動(dòng)。
而要實(shí)現(xiàn)這樣的交互機(jī)制铝量,首先父view要實(shí)現(xiàn)NestedScrollingParent接口倘屹,而子View需要實(shí)現(xiàn)NestedScrollingChild接口,在這套機(jī)制中子View是發(fā)起者慢叨,父view是接受回調(diào)并做出響應(yīng)的纽匙。
以下是幾個(gè)關(guān)鍵的類和接口

/**
 * NestedScrollView is just like {@link android.widget.ScrollView}, but it supports acting
 * as both a nested scrolling parent and child on both new and old versions of Android.
 * Nested scrolling is enabled by default.
 */
public class NestedScrollView extends FrameLayout implements NestedScrollingParent,
        NestedScrollingChild, ScrollingView {
    static final int ANIMATED_SCROLL_GAP = 250;

    static final float MAX_SCROLL_FACTOR = 0.5f;

    private static final String TAG = "NestedScrollView";

    /**
     * Interface definition for a callback to be invoked when the scroll
     * X or Y positions of a view change.
     *
     * <p>This version of the interface works on all versions of Android, back to API v4.</p>
     *
     * @see #setOnScrollChangeListener(OnScrollChangeListener)
     */
    public interface OnScrollChangeListener {
        /**
         * Called when the scroll position of a view changes.
         *
         * @param v The view whose scroll position has changed.
         * @param scrollX Current horizontal scroll origin.
         * @param scrollY Current vertical scroll origin.
         * @param oldScrollX Previous horizontal scroll origin.
         * @param oldScrollY Previous vertical scroll origin.
         */
        void onScrollChange(NestedScrollView v, int scrollX, int scrollY,
                int oldScrollX, int oldScrollY);
    }

    private long mLastScroll;

    private final Rect mTempRect = new Rect();
    private OverScroller mScroller;
    private EdgeEffect mEdgeGlowTop;
    private EdgeEffect mEdgeGlowBottom;
    ······

//主要接口
NestedScrollingChild
NestedScrollingParent
//幫助類
NestedScrollingChildHelper
NestedScrollingParentHelper

AppbarLayout (viewuncle的角色)

繼承自Linearlayout,且方向是vertical拍谐,它可以讓你定制當(dāng)某個(gè)可滾動(dòng)View的滾動(dòng)手勢(shì)發(fā)生變化時(shí)哄辣,其內(nèi)部的子View實(shí)現(xiàn)何種動(dòng)作请梢。

AppBarLayout子View的動(dòng)作

內(nèi)部的子View通過(guò)在布局中加app:layout_scrollFlags設(shè)置執(zhí)行的動(dòng)作

·scroll :子view會(huì)跟隨滾動(dòng)事件一起滾動(dòng),相當(dāng)于添加到scrollview頭部

·enterAlways :只要屏幕下滑力穗,view就會(huì)立即拉下出來(lái)毅弧。

·snap :這個(gè)屬性讓控件變得有彈性,如果控件下拉了75%的高度,就會(huì)自動(dòng)展開当窗,如果只有25%顯示够坐,就會(huì)反彈回去關(guān)閉。(去試試支付寶首頁(yè)吧崖面,就是加了彈性這個(gè)效果)

·exitUntilCollapsed :當(dāng)scrollview滑到訂部元咙,再將子view折疊起來(lái)

·enterAlwaysCollapsed :當(dāng)scrollview滑到底,再將子view展開

可以給ViewPager設(shè)置行為巫员,就不需要使用NestedScrollView的滑動(dòng)庶香,實(shí)現(xiàn)與AppBarLayout聯(lián)動(dòng)。
app:layout_behavior="@string/appbar_scrolling_view_behavior"

setExpande(boolean ) 設(shè)置展開和關(guān)閉狀態(tài)简识,默認(rèn)有開關(guān)動(dòng)畫

使用示例:


app:layout_scrollFlags="scroll"
app:layout_scrollFlags="scroll|enterAlways"

CollapsingToolbarLayout

CollapsingToolbarLayout作用是提供了一個(gè)可以折疊的Toolbar赶掖,它繼承自FrameLayout。
CollapsingToolbarLayout屬性 含義
app:title 設(shè)置標(biāo)題
app:collapsedTitleGravity="center" 設(shè)置標(biāo)題位置
app:contentScrim 設(shè)置折疊時(shí)toolbar的顏色七扰,默認(rèn)是colorPrimary的色值
app:statusBarScrim 設(shè)置折疊時(shí)狀態(tài)欄的顏色 奢赂,默認(rèn)是colorPrimaryDark的色值
app:layout_collapseParallaxMultiplier 設(shè)置視差
app:layout_collapseMode="parallax" 視差模式,在折疊的時(shí)候會(huì)有個(gè)視差折疊的效果
app:layout_collapseMode="pin" 固定模式颈走,在折疊的時(shí)候最后固定在頂端

使用示例:讓圖片折疊膳灶,讓toolbar固定

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:background="@mipmap/bg"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="50dp"
                android:background="#000"
                app:layout_collapseMode="pin"/>
        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>
圖片折疊,固定toolbar

添加flags可以設(shè)置系統(tǒng)狀態(tài)欄為透明立由,如果最頂上是背景這樣用效果更佳

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
setContentView(R.layout.activity_main);

實(shí)現(xiàn)toolbar漸變顏色:AppbarLayout提供了滑動(dòng)偏移監(jiān)聽轧钓,偏移量除以appbar總高度可以得到當(dāng)前滑動(dòng)百分比。注意:這個(gè)verticalOffset是0或者負(fù)數(shù)锐膜,需要轉(zhuǎn)絕對(duì)值聋迎。

        appbarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                //verticalOffset始終為0以下的負(fù)數(shù)
                float percent = (Math.abs(verticalOffset * 1.0f)/appBarLayout.getTotalScrollRange());
            }
        });

這Matial Design的設(shè)計(jì)真好,但是這名取得枣耀,一個(gè)個(gè)兒的也忒長(zhǎng)了吧霉晕,google什么時(shí)候把名字精簡(jiǎn)了啊捞奕?
好了牺堰,以后會(huì)持續(xù)更新的,喜歡我就點(diǎn)我吧颅围!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伟葫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子院促,更是在濱河造成了極大的恐慌筏养,老刑警劉巖斧抱,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渐溶,居然都是意外死亡辉浦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門茎辐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宪郊,“玉大人,你說(shuō)我怎么就攤上這事拖陆〕诨保” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵依啰,是天一觀的道長(zhǎng)乎串。 經(jīng)常有香客問(wèn)我,道長(zhǎng)速警,這世上最難降的妖魔是什么叹誉? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮坏瞄,結(jié)果婚禮上桂对,老公的妹妹穿的比我還像新娘甩卓。我一直安慰自己鸠匀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布逾柿。 她就那樣靜靜地躺著缀棍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪机错。 梳的紋絲不亂的頭發(fā)上爬范,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音弱匪,去河邊找鬼青瀑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萧诫,可吹牛的內(nèi)容都是我干的斥难。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼帘饶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哑诊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起及刻,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤镀裤,失蹤者是張志新(化名)和其女友劉穎竞阐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暑劝,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骆莹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铃岔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汪疮。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毁习,靈堂內(nèi)的尸體忽然破棺而出智嚷,到底是詐尸還是另有隱情,我是刑警寧澤纺且,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布盏道,位于F島的核電站,受9級(jí)特大地震影響载碌,放射性物質(zhì)發(fā)生泄漏猜嘱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一嫁艇、第九天 我趴在偏房一處隱蔽的房頂上張望朗伶。 院中可真熱鬧,春花似錦步咪、人聲如沸论皆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)点晴。三九已至,卻和暖如春悯周,著一層夾襖步出監(jiān)牢的瞬間粒督,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趾浅。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锐墙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子解总,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • CoordinatorLayout與滾動(dòng)的處理 CoordinatorLayout實(shí)現(xiàn)了多種Material De...
    cxm11閱讀 6,590評(píng)論 1 15
  • 用兩張圖告訴你贮匕,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,744評(píng)論 2 59
  • 本文轉(zhuǎn)自:泡在網(wǎng)上的日子 http://www.jcodecraeer.com/a/anzhuokaifa/and...
    JCboy閱讀 1,599評(píng)論 0 1
  • 5CoordinatorLayout與AppBarLayout--嵌套滑動(dòng) 上文我們說(shuō)了AppBarLayout的...
    chefish閱讀 6,181評(píng)論 4 19
  • 突然想發(fā)個(gè)微博花枫,但又不知道說(shuō)些啥刻盐。2012年的十一月份來(lái)杭州的掏膏,到現(xiàn)在差不多整整四年了,四年時(shí)間別人可以用來(lái)讀完大...
    邰風(fēng)先生閱讀 286評(píng)論 0 1