Android Design Support Library使用詳解

Android Design Support Library使用詳解


Google在2015的IO大會上举反,給我們帶來了更加詳細(xì)的Material Design設(shè)計(jì)規(guī)范骑祟,同時(shí)放坏,也給我們帶來了全新的Android Design Support Library哮针,在這個support庫里面巩螃,Google給我們提供了更加規(guī)范的MD設(shè)計(jì)風(fēng)格的控件甚淡。最重要的是大诸,Android Design Support Library的兼容性更廣,直接可以向下兼容到Android 2.2贯卦。這不得不說是一個良心之作资柔。

使用Support Library非常簡單:
添加引用即可:

compile 'com.android.support:design:22.2.0'

下面我們來看看這些新控件的基本使用方法,我們從最簡單的控件開始說起撵割。

部分內(nèi)容直接來自Android Developer Blog中的內(nèi)容:
英文原文:
http://android-developers.blogspot.jp/2015/05/android-design-support-library.html

菠蘿的翻譯:
http://www.jcodecraeer.com/a/anzhuokaifa/developer/2015/0531/2958.html

Snackbar

Snackbar提供了一個介于Toast和AlertDialog之間輕量級控件贿堰,它可以很方便的提供消息的提示和動作反饋。
Snackbar的使用與Toast的使用基本相同:

Snackbar.make(view, "Snackbar comes out", Snackbar.LENGTH_LONG)
                        .setAction("Action", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(
                                        MainActivity.this,
                                        "Toast comes out",
                                        Toast.LENGTH_SHORT).show();
                            }
                        }).show();

需要注意的是啡彬,這里我們把第一個參數(shù)作為Snackbar顯示的基準(zhǔn)元素羹与,而設(shè)置的Action也可以設(shè)置多個。

顯示的效果就類似如下:

這里寫圖片描述

Snackbar在出現(xiàn)一定時(shí)間后庶灿,就會消失注簿,這與Toast一模一樣。

Google API Doc 官方說明:

http://developer.android.com/reference/android/support/design/widget/Snackbar.html

這里寫圖片描述

TextInputLayout

TextInputLayout作為一個父容器控件跳仿,包裝了新的EditText诡渴。通常,單獨(dú)的EditText會在用戶輸入第一個字母之后隱藏hint提示信息,但是現(xiàn)在你可以使用TextInputLayout 來將EditText封裝起來妄辩,提示信息會變成一個顯示在EditText之上的floating label惑灵,這樣用戶就始終知道他們現(xiàn)在輸入的是什么。同時(shí)眼耀,如果給EditText增加監(jiān)聽英支,還可以給它增加更多的floating label。

下面我們來看這與一個TextInputLayout:

<android.support.design.widget.TextInputLayout
        android:id="@+id/til_pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

一定要注意哮伟,他是把EditText包含起來的干花,不能單獨(dú)使用。

在代碼中楞黄,我們給它設(shè)置監(jiān)聽:

        final TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.til_pwd);

        EditText editText = textInputLayout.getEditText();
        textInputLayout.setHint("Password");

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                if (s.length() > 4) {
                    textInputLayout.setError("Password error");
                    textInputLayout.setErrorEnabled(true);
                } else {
                    textInputLayout.setErrorEnabled(false);
                }
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

這樣:顯示效果如下:

這里寫圖片描述

當(dāng)輸入時(shí):

這里寫圖片描述

這里需要注意的是池凄,TextInputLayout的顏色來自style中的colorAccent的顏色:

<item name="colorAccent">#1743b7</item>

下面我們給出Google API Doc上的說明,了解TextInputLayout的詳細(xì)使用方法:

http://developer.android.com/reference/android/support/design/widget/TextInputLayout.html

這里寫圖片描述

Floating Action Button

floating action button 是一個負(fù)責(zé)顯示界面基本操作的圓形按鈕鬼廓。Design library中的FloatingActionButton 實(shí)現(xiàn)了一個默認(rèn)顏色為主題中colorAccent的懸浮操作按鈕肿仑,like this:

這里寫圖片描述

FloatingActionButton——FAB使用非常簡單,你可以指定在加強(qiáng)型FrameLayout里面——CoordinatorLayout碎税,這個我們后面再將尤慰。
關(guān)于FAB的使用,你可以把它當(dāng)做一個button即可雷蹂。

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_done"/>

通過指定layout_gravity就可以指定它的位置伟端。
同樣,你可以通過指定anchor匪煌,即顯示位置的錨點(diǎn):

<android.support.design.widget.FloatingActionButton
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|right|end"
        android:src="@android:drawable/ic_done"
        android:layout_margin="15dp"
        android:clickable="true"/>

除了一般大小的懸浮操作按鈕责蝠,它還支持mini size(fabSize="mini")。FloatingActionButton繼承自ImageView虐杯,你可以使用android:src或者ImageView的任意方法玛歌,比如setImageDrawable()來設(shè)置FloatingActionButton里面的圖標(biāo)昧港。

http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html

TabLayout

Tab滑動切換View并不是一個新的概念擎椰,但是Google卻是第一次在support庫中提供了完整的支持,而且创肥,Design library的TabLayout 既實(shí)現(xiàn)了固定的選項(xiàng)卡 - view的寬度平均分配达舒,也實(shí)現(xiàn)了可滾動的選項(xiàng)卡 - view寬度不固定同時(shí)可以橫向滾動。選項(xiàng)卡可以在程序中動態(tài)添加:

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("tab1"));
        tabLayout.addTab(tabLayout.newTab().setText("tab2"));
        tabLayout.addTab(tabLayout.newTab().setText("tab3"));

但大部分時(shí)間我們都不會這樣用叹侄,通彻滑動布局都會和ViewPager配合起來使用,所以趾代,我們需要ViewPager來幫忙:

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        // 設(shè)置ViewPager的數(shù)據(jù)等
        setupViewPager();
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);

通過一句話setupWithViewPager贯底,我們就把ViewPager和TabLayout結(jié)合了起來。

這里寫圖片描述

http://developer.android.com/reference/android/support/design/widget/TabLayout.html

NavigationView

NavigationView在MD設(shè)計(jì)中非常重要撒强,之前Google也提出了使用DrawerLayout來實(shí)現(xiàn)導(dǎo)航抽屜禽捆。這次笙什,在support library中,Google提供了NavigationView來實(shí)現(xiàn)導(dǎo)航菜單界面胚想,所以琐凭,新的導(dǎo)航界面可以這樣寫了:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/dl_main_drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- 你的內(nèi)容布局-->
    <include layout="@layout/navigation_content"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/nv_main_navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navigation_header"
        app:menu="@menu/drawer_view"/>

</android.support.v4.widget.DrawerLayout>

其中最重要的就是這兩個屬性:

app:headerLayout
app:menu

通過這兩個屬性,我們可以非常方便的指定導(dǎo)航界面的頭布局和菜單布局:

這里寫圖片描述

其中最上面的布局就是app:headerLayout所指定的頭布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="200dp"
              android:background="?attr/colorPrimaryDark"
              android:gravity="center"
              android:orientation="vertical"
              android:padding="16dp"
              android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginTop="16dp"
        android:background="@drawable/ic_user"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:gravity="center"
        android:text="XuYisheng"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        android:textSize="20sp"/>

</LinearLayout>

而下面的菜單布局浊服,我們可以直接通過menu內(nèi)容自動生成统屈,而不需要我們來指定布局:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="CC Talk"/>
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="HJ Class"/>
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Words"/>
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Big HJ"/>
    </group>

    <item android:title="Version">
        <menu>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="Android"/>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="iOS"/>
        </menu>
    </item>

</menu>

你可以通過設(shè)置一個OnNavigationItemSelectedListener,使用其setNavigationItemSelectedListener()來獲得元素被選中的回調(diào)事件牙躺。它為你提供被點(diǎn)擊的 菜單元素 愁憔,讓你可以處理選擇事件,改變復(fù)選框狀態(tài)述呐,加載新內(nèi)容惩淳,關(guān)閉導(dǎo)航菜單,以及其他任何你想做的操作乓搬。例如這樣:

private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
    }

可見思犁,Google將這些東西封裝的非常易于使用了。

AppBarLayout

AppBarLayout跟它的名字一樣进肯,把容器類的組件全部作為AppBar激蹲。like this:

這里寫圖片描述

這里就是把Toolbar和TabLayout放到了AppBarLayout中,讓他們當(dāng)做一個整體作為AppBar江掩。

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

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

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

http://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

CoordinatorLayout

CoordinatorLayout是這次新添加的一個增強(qiáng)型的FrameLayout学辱。在CoordinatorLayout中,我們可以在FrameLayout的基礎(chǔ)上完成很多新的操作环形。

Floating View

MD的一個新的特性就是增加了很多可懸浮的View策泣,像我們前面說的Floating Action Button。我們可以把FAB放在任何地方抬吟,只需要通過:

android:layout_gravity="end|bottom"

來指定顯示的位置萨咕。同時(shí),它還提供了layout_anchor來供你設(shè)置顯示坐標(biāo)的錨點(diǎn):

app:layout_anchor="@id/appbar"

創(chuàng)建滾動

CoordinatorLayout可以說是這次support library更新的重中之重火本。它從另一層面去控制子view之間觸摸事件的布局危队,Design library中的很多控件都利用了它。

一個很好的例子就是當(dāng)你將FloatingActionButton作為一個子View添加進(jìn)CoordinatorLayout并且將CoordinatorLayout傳遞給 Snackbar.make()钙畔,在3.0及其以上的設(shè)備上茫陆,Snackbar不會顯示在懸浮按鈕的上面,而是FloatingActionButton利用CoordinatorLayout提供的回調(diào)方法擎析,在Snackbar以動畫效果進(jìn)入的時(shí)候自動向上移動讓出位置簿盅,并且在Snackbar動畫地消失的時(shí)候回到原來的位置,不需要額外的代碼。

官方的例子很好的說明了這一點(diǎn):

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
      
     <! -- Your Scrollable View -->
    <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <android.support.v7.widget.Toolbar
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">
 
            <android.support.design.widget.TabLayout
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">
     </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

其中桨醋,一個可以滾動的組件见秽,例如RecyclerView、ListView(這里需要注意的是讨盒,貌似只支持RecyclerView解取、ListView,如果你用一個ScrollView返顺,是沒有效果的)禀苦。如果:
1、給這個可滾動組件設(shè)置了layout_behavior
2遂鹊、給另一個控件設(shè)置了layout_scrollFlags
那么振乏,當(dāng)設(shè)置了layout_behavior的控件滑動時(shí),就會觸發(fā)設(shè)置了layout_scrollFlags的控件發(fā)生狀態(tài)的改變秉扑。

這里寫圖片描述

設(shè)置的layout_scrollFlags有如下幾種選項(xiàng):

  • scroll: 所有想滾動出屏幕的view都需要設(shè)置這個flag- 沒有設(shè)置這個flag的view將被固定在屏幕頂部慧邮。
  • enterAlways: 這個flag讓任意向下的滾動都會導(dǎo)致該view變?yōu)榭梢姡瑔⒂每焖佟胺祷啬J健薄?/li>
  • enterAlwaysCollapsed: 當(dāng)你的視圖已經(jīng)設(shè)置minHeight屬性又使用此標(biāo)志時(shí)舟陆,你的視圖只能已最小高度進(jìn)入误澳,只有當(dāng)滾動視圖到達(dá)頂部時(shí)才擴(kuò)大到完整高度。
  • exitUntilCollapsed: this flag causes the view to scroll off until it is ‘collapsed’ (its minHeight) before exiting秦躯。

需要注意的是忆谓,后面兩種模式基本只有在CollapsingToolbarLayout才有用,而前面兩種模式基本是需要一起使用的踱承,也就是說倡缠,這些flag的使用場景,基本已經(jīng)固定了茎活。
例如我們前面例子中的昙沦,也就是這種模式:

app:layout_scrollFlags="scroll|enterAlways"

PS : 所有使用scroll flag的view都必須定義在沒有使用scroll flag的view的前面,這樣才能確保所有的view從頂部退出载荔,留下固定的元素盾饮。

http://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html

CollapsingToolbarLayout

CollapsingToolbarLayout提供了一個可以折疊的Toolbar,這也是Google+身辨、photos中的效果丐谋。Google把它做成了一個標(biāo)準(zhǔn)控件芍碧,更加方便大家使用煌珊。

這里先看一個例子:

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/ic_banner"
                app:layout_collapseMode="parallax"/>

            <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"/>

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

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

我們在CollapsingToolbarLayout中放置了一個ImageView和一個Toolbar。并把這個CollapsingToolbarLayout放到AppBarLayout中作為一個整體泌豆。在CollapsingToolbarLayout中定庵,我們分別設(shè)置了ImageView和一個Toolbar的layout_collapseMode。
這里使用了CollapsingToolbarLayout的app:layout_collapseMode="pin"來確保Toolbar在view折疊的時(shí)候仍然被固定在屏幕的頂部。當(dāng)你讓CollapsingToolbarLayout和Toolbar在一起使用的時(shí)候蔬浙,title會在展開的時(shí)候自動變得大些猪落,而在折疊的時(shí)候讓字體過渡到默認(rèn)值。必須注意畴博,在這種情況下你必須在CollapsingToolbarLayout上調(diào)用setTitle()笨忌,而不是在Toolbar上。

除了固定住view俱病,你還可以使用app:layout_collapseMode="parallax"(以及使用app:layout_collapseParallaxMultiplier="0.7"來設(shè)置視差因子)來實(shí)現(xiàn)視差滾動效果(比如CollapsingToolbarLayout里面的一個ImageView)官疲,這中情況和CollapsingToolbarLayout的app:contentScrim="?attr/colorPrimary"屬性一起配合更完美。

在這個例子中亮隙,我們同樣設(shè)置了:

app:layout_scrollFlags="scroll|exitUntilCollapsed">

來接收一個:

app:layout_behavior="@string/appbar_scrolling_view_behavior">

這樣才能產(chǎn)生滾動效果途凫,而通過layout_collapseMode,我們就設(shè)置了滾動時(shí)內(nèi)容的變化效果溢吻。

這里寫圖片描述

再來看一個官方的實(shí)例:

這里寫圖片描述

CoordinatorLayout與自定義view

有一件事情必須注意维费,那就是CoordinatorLayout并不知道FloatingActionButton或者AppBarLayout的內(nèi)部工作原理 - 它只是以Coordinator.Behavior的形式提供了額外的API,該API可以使子View更好的控制觸摸事件與手勢以及聲明它們之間的依賴促王,并通過onDependentViewChanged()接收回調(diào)犀盟。

可以使用CoordinatorLayout.DefaultBehavior(你的View.Behavior.class)注解或者在布局中使用app:layout_behavior="com.example.app.你的View$Behavior"屬性來定義view的默認(rèn)行為。framework讓任意view和CoordinatorLayout結(jié)合在一起成為了可能蝇狼。

http://developer.android.com/reference/android/support/design/widget/CollapsingToolbarLayout.html

總結(jié)

經(jīng)過幾天的研究且蓬,Google這次提出的Android Design Support Library的意義其實(shí)并不在于給出了這些非常好的控件,其實(shí)這些控件在Github上基本都能找到相應(yīng)的题翰。它的目的在于Google給出了官方的設(shè)計(jì)指導(dǎo)恶阴,進(jìn)一步完善了MD設(shè)計(jì)思想。這才是Android Design Support Library最重要的特性豹障。當(dāng)然冯事,平心而論,這些控件的使用并不是非常的人性化血公,過多的封裝導(dǎo)致整個效果不是非常的具有可定制性昵仅,但是,這畢竟是Google邁出的第一步累魔,后面一定會更加牛逼摔笤。

Demo

最后,給出一個融合MD和Android Design Support Library的Demo供大家研究垦写,相信結(jié)合文章和代碼吕世,大家一定能很快理解Android Design Support Library的使用方法。

DesignSupportLibraryDemo

https://github.com/xuyisheng/DesignSupportLibraryDemo 歡迎大家star梯投、fork命辖。

當(dāng)前版本還未完善况毅,很多畫面還在處理中。后續(xù)會進(jìn)一步豐富尔艇、完善尔许,作為一個MD設(shè)計(jì)的Demo。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末终娃,一起剝皮案震驚了整個濱河市味廊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棠耕,老刑警劉巖毡们,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昧辽,居然都是意外死亡衙熔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門搅荞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來红氯,“玉大人,你說我怎么就攤上這事咕痛×「剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵茉贡,是天一觀的道長谭梗。 經(jīng)常有香客問我呼伸,道長脚作,這世上最難降的妖魔是什么刑然? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮愉粤,結(jié)果婚禮上砾医,老公的妹妹穿的比我還像新娘。我一直安慰自己衣厘,他們只是感情好如蚜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著影暴,像睡著了一般错邦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上型宙,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天撬呢,我揣著相機(jī)與錄音,去河邊找鬼早歇。 笑死倾芝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箭跳。 我是一名探鬼主播晨另,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谱姓!你這毒婦竟也來了借尿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤屉来,失蹤者是張志新(化名)和其女友劉穎路翻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茄靠,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茂契,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨绳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉冶。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脐雪,靈堂內(nèi)的尸體忽然破棺而出厌小,到底是詐尸還是另有隱情,我是刑警寧澤战秋,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布璧亚,位于F島的核電站,受9級特大地震影響脂信,放射性物質(zhì)發(fā)生泄漏癣蟋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一狰闪、第九天 我趴在偏房一處隱蔽的房頂上張望梢薪。 院中可真熱鬧,春花似錦尝哆、人聲如沸秉撇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐馆。三九已至,卻和暖如春恒序,著一層夾襖步出監(jiān)牢的瞬間瘦麸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工歧胁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滋饲,地道東北人厉碟。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像屠缭,于是被迫代替她去往敵國和親箍鼓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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