狀態(tài)欄及導(dǎo)航欄相關(guān)知識小結(jié)

在開發(fā)應(yīng)用的過程中关串,會遇見一些狀態(tài)欄和導(dǎo)航欄相關(guān)的問題拧廊,在此記錄一下。本文主要目的是記錄我在開發(fā)中遇到的狀態(tài)欄和導(dǎo)航欄相關(guān)的問題晋修,以便日后查看方便吧碾,如果可以幫到你,真是再好不過了墓卦。

本文主要分為以下幾個(gè)部分:

catalog.png

1. 基本概念

首先需要明白幾個(gè)概念:

  • 狀態(tài)欄(StatusBar):指屏幕最頂端倦春,顯示時(shí)間、電量落剪、推送圖標(biāo)那一欄睁本,每個(gè)手機(jī)都有狀態(tài)欄。
  • 標(biāo)題欄(TitleBar):指狀態(tài)欄下忠怖,顯示“返回鍵”呢堰、“標(biāo)題文字”那一欄,根據(jù)需求而定是否有標(biāo)題欄脑又,標(biāo)題欄可以使用 Toolbar 或者 ActionBar 控件實(shí)現(xiàn)
  • 導(dǎo)航欄(NavigationBar):指屏幕最下端暮胧,有“返回鍵”、“Home鍵”问麸、”菜單鍵“那一欄往衷。導(dǎo)航欄是虛擬的,不是每個(gè)手機(jī)都有的严卖。
    狀態(tài)欄席舍、標(biāo)題欄、導(dǎo)航欄可以參照下圖:


    statusbar&navigationbar.png
  • 沉浸式模式(Immersive Mode):沉浸式就是要給用戶提供完全沉浸的體驗(yàn)哮笆,使用戶有一種置身于虛擬世界之中的感覺来颤。 ---- Android狀態(tài)欄微技巧,帶你真正理解沉浸式模式

    沉浸式模式本質(zhì)上就是把狀態(tài)欄稠肘、導(dǎo)航欄隱藏福铅,將應(yīng)用界面全屏化。

    最常見的沉浸式模式應(yīng)用在游戲和視頻類應(yīng)用中项阴,比如愛奇藝的全屏播放滑黔,如下圖所示:


    aiqiyi.png
  • 透明狀態(tài)欄:如下圖所示,透明狀態(tài)欄就是讓應(yīng)用界面背景利用系統(tǒng)狀態(tài)欄空間环揽,讓應(yīng)用界面背景和系統(tǒng)狀態(tài)欄融為一體略荡。


    transparentstatusbar.png

需要注意的是,并沒有沉浸式狀態(tài)欄這一概念歉胶,只有沉浸式模式透明狀態(tài)欄的概念汛兜。

2. 實(shí)踐效果

2.1 淡化狀態(tài)欄和導(dǎo)航欄

Android 4.0(API level 14)及之后 的版本中,可以實(shí)現(xiàn)使?fàn)顟B(tài)欄和導(dǎo)航欄淡化的效果(Dimming the System Bars)

效果:


dimming.gif

注意觀察狀態(tài)欄和導(dǎo)航欄的變化通今。

代碼:

/**
 * 淡化狀態(tài)欄和導(dǎo)航欄
 */
private fun dimmingStatusBar() {
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        // This example uses decor view, but you can use any visible view.
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
    }
}

說明:

  • SYSTEM_UI_FLAG_LOW_PROFILE 標(biāo)志并不會重新分配界面中 UI 的大小粥谬,只是 StatusBar 和 NavigationBar 的相關(guān)圖標(biāo)會被弱化
  • 一旦用戶觸摸 StatusBar 和 NavigationBar 相關(guān)區(qū)域,系統(tǒng)便清除掉了 SYSTEM_UI_FLAG_LOW_PROFILE 標(biāo)志
  • SYSTEM_UI_FLAG_LOW_PROFILE 標(biāo)志只可以在 Android 4.0(API level 14) 及之后的版本中使用
  • 可以使用代碼手動清除 SYSTEM_UI_FLAG_LOW_PROFILE 標(biāo)志衡创,代碼如下所示:
private fun clearSystemUIFlag() {
    window.decorView.systemUiVisibility = 0
}

2.2 隱藏狀態(tài)欄

隱藏狀態(tài)欄分為兩種情況:

  • 在 Android 4.0(API level 14) 及之下的版本中隱藏狀態(tài)欄
  • 在 Android 4.0(API level 14) 之上的版本中隱藏狀態(tài)欄

2.2.1 在 Android 4.0 及之下

在 Android 4.0 及之下的版本中帝嗡,可以通過設(shè)置 WindowManager 的 flag 實(shí)現(xiàn)隱藏狀態(tài)欄的效果,設(shè)置 WindowManager 的 flag 有兩種方式:

代碼:

  • 通過編寫代碼設(shè)置 WindowManager 的 flag
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}
  • 通過設(shè)置 AndroidManifest.xml 中 Activity 的 theme 設(shè)置 WindowManager 的 flag

    <!-- style.xml -->
    <resources>
    
      <!-- Base application theme. -->
      <style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
          <!-- Customize your theme here. -->
          <item name="colorPrimary">@color/colorPrimary</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorAccent">@color/colorAccent</item>
      </style>
    
      <style name="FullScreenTheme" parent="BaseAppTheme">
          <item name="android:windowFullscreen">true</item>
      </style>
    
      ...
    
    </resources>
    
    <!-- AndroidManifest.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.lijiankun24.statusbarpractice">
    
      <application
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/BaseAppTheme"
          ... >
    
          <activity
              android:name=".activity.MainActivity"
              android:theme="@style/FullScreenTheme">
          </activity>
    
          ...
      </application>
    
    </manifest>
    

說明:

  • 通過設(shè)置 Activity 的 Theme實(shí)現(xiàn)隱藏狀態(tài)欄有如下優(yōu)點(diǎn):
    • 簡單而且不易出錯(cuò)
    • UI 切換更流暢璃氢,因?yàn)橄到y(tǒng)在實(shí)例化 Activity 對象之前就已經(jīng)獲得了渲染 UI 界面的相關(guān)信息
  • 通過編寫代碼設(shè)置 WindowManager 的 flag 的方式更容易控制系統(tǒng) UI 的顯示和隱藏
  • 現(xiàn)在市場上 Android 4.0 之下的手機(jī)已經(jīng)很少了哟玷,而且很多應(yīng)用最低版本都在 Android 4.0 之上,所以這點(diǎn)可以依情況而定

2.2.2 在 Android 4.0 之上

效果:


hidestatusbar.gif

代碼:

private fun hideStatusBar() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
    } else {
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    }
}

說明:

  • 如果只使用 SYSTEM_UI_FLAG_FULLSCREEN 標(biāo)志一也,在狀態(tài)欄區(qū)域向下滑動出現(xiàn)狀態(tài)欄的時(shí)候巢寡,內(nèi)容區(qū)域會出現(xiàn)一個(gè)擠壓的效果,如下圖所示:
    hidestatusbar1.gif
  • 可以使用 SYSTEM_UI_FLAG_LAYOUT_FULLSCREE 標(biāo)志椰苟,讓應(yīng)用的內(nèi)容區(qū)域顯示在狀態(tài)欄的后面抑月,還可以配合 SYSTEM_UI_FLAG_LAYOUT_STABLE 標(biāo)志使用,讓布局保持穩(wěn)定
  • 一旦這些標(biāo)志位被清除舆蝴,則需要重新設(shè)置讓狀態(tài)欄隱藏谦絮,可以通過監(jiān)聽狀態(tài)欄和導(dǎo)航欄的可見性题诵,判斷狀態(tài)欄和導(dǎo)航欄是否可見
  • 在不同的位置設(shè)置 UI flag 是有區(qū)別的。比如层皱,如果在 onCreate() 方法中隱藏狀態(tài)欄性锭,那當(dāng)用戶按下 Home 鍵的時(shí)候,狀態(tài)欄重新顯示叫胖,再打開應(yīng)用重新回到這個(gè) Activity 的時(shí)候草冈,用戶可以看到狀態(tài)欄,因?yàn)檫@時(shí)不會調(diào)用 onCreate() 方法瓮增。如果在 onResume() 或者 onWindowFocusChanged() 就可以避免上面這種情況
  • 只有當(dāng)調(diào)用 setSystemUiVisibility()View 是可見的時(shí)候怎棱,setSystemUiVisibility() 方法才會起作用
  • 界面的切換會導(dǎo)致 setSystemUiVisibility() 的設(shè)置失效
  • 如果設(shè)置內(nèi)容區(qū)域在狀態(tài)欄的背后,那當(dāng)狀態(tài)欄顯示的時(shí)候會遮擋住一部分內(nèi)容區(qū)域绷跑,為防止這種情況發(fā)生拳恋,只需要在布局文件中添加 android:fitsSystemWindows 屬性(值為true),就可以解決這種問題,效果如下圖所示:
    fitsSystemWindows2.png

代碼如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.lijiankun24.statusbarpractice.activity.FitsSystemWindowsActivity">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@android:color/holo_blue_light"
      android:fitsSystemWindows="true"
      android:text="@string/app_name"
      android:textColor="@android:color/white"
      android:textSize="28sp"/>
</android.support.constraint.ConstraintLayout>

2.3 隱藏導(dǎo)航欄

效果:


hidenavigationbar.gif

代碼:

class HideNavigationbarActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        hideNavigationBar()
        setContentView(R.layout.activity_hide_navigationbar)
    }

    private fun hideNavigationBar() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
            window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                    View.SYSTEM_UI_FLAG_FULLSCREEN or
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        }
    }
}

說明:

  • 按照一個(gè)通用的規(guī)則砸捏,在隱藏導(dǎo)航欄的時(shí)候诅岩,一般也需要隱藏狀態(tài)欄
  • 通過這種方式隱藏導(dǎo)航欄和狀態(tài)欄之后,觸摸屏幕的任何區(qū)域带膜,導(dǎo)航欄和狀態(tài)欄都會重新出現(xiàn)且不會再消失吩谦,如果想讓導(dǎo)航欄和狀態(tài)欄消失,則需要手動重新設(shè)置 UI flag
  • 如果想讓內(nèi)容區(qū)域出現(xiàn)在導(dǎo)航欄的后面膝藕,則需要配合使用 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 標(biāo)志式廷,并且最好配合使用 SYSTEM_UI_FLAG_LAYOUT_STABLE 使布局保持穩(wěn)定
  • SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIONSYSTEM_UI_FLAG_HIDE_NAVIGATION 可以在 Android 4.1 (API level 15)使用

2.4 沉浸式模式

效果:

SYSTEM_UI_FLAG_IMMERSIVE :

immersive.gif

SYSTEM_UI_FLAG_IMMERSIVE_STICKY :

immersive1.gif

代碼:

class ImmersiveActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        hideSystemUI()
        setContentView(R.layout.activity_immersive)
    }

    private fun hideSystemUI() {
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
//                or View.SYSTEM_UI_FLAG_IMMERSIVE
    }
}

說明:

  • 真正的沉浸式模式如上面兩個(gè)圖所示,Activity 可以接收到所有的觸摸事件
  • 當(dāng)使用 SYSTEM_UI_FLAG_IMMERSIVE 標(biāo)志時(shí)芭挽,用戶滑動狀態(tài)欄和導(dǎo)航欄邊緣的時(shí)候滑废,狀態(tài)欄和導(dǎo)航欄會出現(xiàn),并且不會再消失袜爪,
  • 當(dāng)使用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 標(biāo)志時(shí)蠕趁,用戶滑動狀態(tài)欄和導(dǎo)航欄邊緣的時(shí)候,狀態(tài)欄和導(dǎo)航欄會出現(xiàn)辛馆,但是和 SYSTEM_UI_FLAG_IMMERSIVE 不同的是俺陋,過一會兒狀態(tài)欄和導(dǎo)航欄會自動消失
  • 如果設(shè)置了 View.OnSystemUiVisibilityChangeListener 監(jiān)聽器,SYSTEM_UI_FLAG_IMMERSIVE 會觸發(fā) OnSystemUiVisibilityChangeListener 監(jiān)聽器昙篙,但是 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 不會觸發(fā) OnSystemUiVisibilityChangeListener 監(jiān)聽器

2.5 監(jiān)聽狀態(tài)欄和導(dǎo)航欄可見性

可以通過 View.OnSystemUiVisibilityChangeListener 為該 View 設(shè)置狀態(tài)欄和導(dǎo)航欄可見性的監(jiān)聽器腊状,代碼如下所示:

class RespondingActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        respondingSystemUI()
        setContentView(R.layout.activity_responding)
        window.decorView.setOnSystemUiVisibilityChangeListener {
            L.i("visibility is " + it)
        }
    }

    private fun respondingSystemUI() {
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_IMMERSIVE
    }
}

2.6 透明狀態(tài)欄和導(dǎo)航欄

效果:


transparent.gif

代碼:

class TransparentNavigationbarActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        transparentingNavigationbar()
        setContentView(R.layout.activity_transparent_navigationbar)
    }

    private fun transparentingNavigationbar() {
        var uiFlag = 0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            uiFlag = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                    View.SYSTEM_UI_FLAG_FULLSCREEN or
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            uiFlag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or uiFlag
        }
        window.decorView.systemUiVisibility = uiFlag
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.statusBarColor = Color.TRANSPARENT
            window.navigationBarColor = Color.TRANSPARENT
        }
    }
}

說明:

  • 除了可以設(shè)置狀態(tài)欄和導(dǎo)航欄為透明,還可以設(shè)置為其他顏色
  • 只可以在 Android 5.0(API level 21)及以上的 Android 版本中設(shè)置狀態(tài)欄和導(dǎo)航欄的顏色

3 總結(jié)

本文主要介紹了狀態(tài)欄苔可、導(dǎo)航欄缴挖、標(biāo)題欄、沉浸式模式和透明狀態(tài)欄的概念焚辅,以及實(shí)現(xiàn)隱藏狀態(tài)欄映屋、隱藏導(dǎo)航欄苟鸯、沉浸式模式和透明狀態(tài)欄的方式。

3.1 版本要求

實(shí)現(xiàn)的主要方式是通過設(shè)置 window.decorView.systemUiVisibility 的屬性值實(shí)現(xiàn)的棚点,但是不是所有的 Android 版本都可以實(shí)現(xiàn)上述那些效果的倔毙,實(shí)現(xiàn)上述效果的版本要求如下圖所示:

效果 版本要求
淡化狀態(tài)欄和導(dǎo)航欄 Version >= 14
隱藏狀態(tài)欄 全部版本
隱藏導(dǎo)航欄 Version >= 16
沉浸式模式 Version >= 19
透明狀態(tài)欄 Version >= 21

3.2 相關(guān)文章

本文中涉及到的代碼在 Github 上面 StatusBarPractice

本文中只涉及到我在實(shí)現(xiàn)開屏廣告全屏過程中遇到的一些問題,但是還有其他很多相關(guān)的問題沒有涉及到乙濒,下面有一些相關(guān)文章,講的都很詳細(xì):

隨手記Android沉浸式狀態(tài)欄的踩坑之路 ---- 劉玲

管理System UI (狀態(tài)欄 + 導(dǎo)航欄) ---- ShenJC

Android 系統(tǒng)狀態(tài)欄沉浸式/透明化完整解決方案 ---- btman

Android 沉浸式 (透明) 狀態(tài)欄適配 ---- xiaoyanger

Android狀態(tài)欄微技巧卵蛉,帶你真正理解沉浸式模式 ---- 郭霖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颁股,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子傻丝,更是在濱河造成了極大的恐慌甘有,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葡缰,死亡現(xiàn)場離奇詭異亏掀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)泛释,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門滤愕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怜校,你說我怎么就攤上這事间影。” “怎么了茄茁?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵魂贬,是天一觀的道長。 經(jīng)常有香客問我裙顽,道長付燥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任愈犹,我火速辦了婚禮键科,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漩怎。我一直安慰自己萝嘁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著已脓,像睡著了一般跟匆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咱枉,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天卑硫,我揣著相機(jī)與錄音,去河邊找鬼蚕断。 笑死欢伏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亿乳。 我是一名探鬼主播硝拧,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼葛假!你這毒婦竟也來了障陶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聊训,失蹤者是張志新(化名)和其女友劉穎抱究,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體带斑,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼓寺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勋磕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妈候。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挂滓,靈堂內(nèi)的尸體忽然破棺而出州丹,到底是詐尸還是另有隱情,我是刑警寧澤杂彭,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布墓毒,位于F島的核電站,受9級特大地震影響亲怠,放射性物質(zhì)發(fā)生泄漏所计。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一团秽、第九天 我趴在偏房一處隱蔽的房頂上張望主胧。 院中可真熱鬧,春花似錦习勤、人聲如沸踪栋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夷都。三九已至,卻和暖如春予颤,著一層夾襖步出監(jiān)牢的瞬間囤官,已是汗流浹背冬阳。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留党饮,地道東北人肝陪。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像刑顺,于是被迫代替她去往敵國和親氯窍。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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