Material Design 控件知識(shí)梳理(5) - DrawerLayout && NavigationView

Material Design 控件知識(shí)梳理(1) - Android Design Support Library 是什么
Material Design 控件知識(shí)梳理(2) - AppBarLayout & CollapsingToolbarLayout
Material Design 控件知識(shí)梳理(3) - BottomSheet && BottomSheetDialog && BottomSheetDialogFragment
Material Design 控件知識(shí)梳理(4) - FloatingActionButton
Material Design 控件知識(shí)梳理(5) - DrawerLayout && NavigationView
Material Design 控件知識(shí)梳理(6) - Snackbar
Material Design 控件知識(shí)梳理(7) - BottomNavigationBar
Material Design 控件知識(shí)梳理(8) - TabLayout
Material Design 控件知識(shí)梳理(9) - TextInputLayout

一、概述

今天妻枕,我們來(lái)介紹兩個(gè)和側(cè)滑菜單有關(guān)的MD控件:

  • DrawerLayout:實(shí)現(xiàn)側(cè)滑菜單的基礎(chǔ)。
  • NavigationView:作為側(cè)滑菜單布局的一種實(shí)現(xiàn)方式博杖。

二、DrawerLayout

2.1 基本原理

當(dāng)我們需要使用到側(cè)滑菜單時(shí)筷登,可以通過(guò)DrawerLayout來(lái)實(shí)現(xiàn)剃根,DrawerLayout、側(cè)滑菜單布局前方、普通布局這三者的關(guān)系為:


layout_gravity決定了將哪個(gè)菜單作為側(cè)滑布局狈醉,DrawerLayout會(huì)根據(jù)是否聲明了layout_gravity屬性,把它內(nèi)部的直接子View分成兩類(lèi):

  • 對(duì)于沒(méi)有聲明layout_gravity的布局惠险,那么它會(huì)將它們當(dāng)作普通布局苗傅,并按照FrameLayout的方式來(lái)排列它們。
  • 對(duì)于聲明了layout_gravity="start"或者layout_gravity="left"的布局班巩,在普通情況下會(huì)將它們隱藏起來(lái)渣慕,當(dāng)從屏幕的最左側(cè)往右移動(dòng)手指時(shí),這個(gè)布局會(huì)漸漸展現(xiàn)出來(lái)抱慌,對(duì)于DrawerLayout的所有子View來(lái)說(shuō)摇庙,只允許有一個(gè)子View的該屬性為start/left,這就是我們的側(cè)滑布局遥缕。
  • layout_gravity="end/right"和上面類(lèi)似卫袒,只不過(guò)它的調(diào)出是從屏幕的右側(cè)向左側(cè)移動(dòng)。

2.2 簡(jiǎn)單事例

下面是一個(gè)使用DrawerLayout的最簡(jiǎn)單的例子:

<android.support.v4.widget.DrawerLayout
    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=".DrawerLayoutActivity">
    <!-- 普通布局 -->
    <FrameLayout
        android:id="@+id/fl_content"
        android:background="@android:color/holo_orange_dark"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:text="我是內(nèi)容布局"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </FrameLayout>
    <!-- 側(cè)滑布局 -->
    <include layout="@layout/layout_drawer_normal"/>
</android.support.v4.widget.DrawerLayout>

layout_drawer_normal就是側(cè)滑菜單单匣,我們將它的layout_gravity定義為start夕凝,按照前面的分析,它應(yīng)當(dāng)位于屏幕的左側(cè):

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_gravity="start"
    android:layout_width="200dp"
    android:background="@android:color/holo_green_dark"
    android:layout_height="match_parent">
    <TextView
        android:text="我是側(cè)滑布局"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

下面是最終的效果:


2.3 監(jiān)聽(tīng)DrawerLayout的狀態(tài)變化

如果我們希望監(jiān)聽(tīng)DrawerLayout狀態(tài)的變化户秤,那么可以通過(guò)下面這個(gè)方法:

    private Toolbar mToolbar;
    private ActionBarDrawerToggle mActionBarDrawerToggle;
    private DrawerLayout mDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer_layout_simple);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                Log.d("mDrawerLayout", "onDrawerSlide, slideOffset=" + slideOffset);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                Log.d("mDrawerLayout", "onDrawerOpened");
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                Log.d("mDrawerLayout", "onDrawerClosed");
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                Log.d("mDrawerLayout", "onDrawerStateChanged, state=" + newState);

            }
        });

    }

其中openedclosed方法都很好理解码秉,就是對(duì)應(yīng)展開(kāi)和收起,而onDrawerSlide方法中的slideOffset鸡号,則對(duì)應(yīng)于DrawerLayout展開(kāi)的偏移值转砖,全部展開(kāi)時(shí)為1,全部收起時(shí)為0鲸伴,onDrawerStateChanged對(duì)應(yīng)于所處的狀態(tài):STATE_IDLE/STATE_DRAGGING/STATE_SETTLING府蔗。

三、DrawerLayoutToolbar結(jié)合使用

3.1 ToolbarNavigationIcon跟隨DrawerLayout變化

下面汞窗,我們看一下把DrawerLayoutToolbar相結(jié)合姓赤,做出下面的效果,讓ToolbarnavigationIcon跟隨著DrawerLayout變化:


當(dāng)拖動(dòng)側(cè)邊欄的時(shí)候仲吏,Toolbar的按鈕會(huì)跟隨著進(jìn)行狀態(tài)的變化不铆,我們也可以通過(guò)點(diǎn)擊Toolbar的按鈕來(lái)展開(kāi)和收起側(cè)邊欄蝌焚,首先看我們的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- Toolbar -->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:background="@android:color/holo_green_dark"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"/>
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- 普通布局 -->
        <FrameLayout
            android:id="@+id/fl_content"
            android:background="@android:color/holo_orange_dark"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:text="我是內(nèi)容布局"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </FrameLayout>
        <!-- 側(cè)滑布局 -->
        <include layout="@layout/layout_drawer_normal"/>
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

Activity中,我們需要將ToolbarDrawerLayout關(guān)聯(lián)起來(lái):

public class DrawerLayoutActivity extends AppCompatActivity {

    private Toolbar mToolbar;
    private ActionBarDrawerToggle mActionBarDrawerToggle;
    private DrawerLayout mDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer_layout_under_toolbar);
        initView();
    }

    private void initView() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true); //1.決定顯示.
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close); //2.傳入Toolbar可以點(diǎn)擊.
        mDrawerLayout.addDrawerListener(mActionBarDrawerToggle); //3.監(jiān)聽(tīng)變化.
    }

    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        //4.同步狀態(tài)
        mActionBarDrawerToggle.syncState();
    }
}

這里需要做的有四步工作:

  • Toolbar作為ActionBar誓斥,并調(diào)用ToolbarsetDisplayHomeAsUpEnabled只洒,這樣最左邊的Icon才可以顯示。
  • 實(shí)例化ActionBarDrawerToggle劳坑,并傳入ToolbarDrawerLayout毕谴。
  • 通過(guò)DrawerLayoutaddDrawerListener方法,讓DrawerLayout的狀態(tài)能夠回調(diào)到ActionBarDrawerToggle泡垃。
  • onPostCreate中析珊,調(diào)用ActionBarDrawerTogglesyncState方法羡鸥。

3.2 DrawerLayout覆蓋Toolbar

在上面的實(shí)現(xiàn)方式中蔑穴,側(cè)滑菜單位于Toolbar的下方,如果我們希望它覆蓋Toolbar惧浴,那么可以像下面這樣布局:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 普通布局 -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:background="@android:color/holo_green_dark"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"/>
        <FrameLayout
            android:id="@+id/fl_content"
            android:background="@android:color/holo_orange_dark"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:text="我是內(nèi)容布局"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </FrameLayout>
    </LinearLayout>
    <!-- 側(cè)滑布局 -->
    <include layout="@layout/layout_drawer_normal"/>
</android.support.v4.widget.DrawerLayout>

最終的效果為:


3.3 DrawerLayoutToolbar延伸到狀態(tài)欄上方

如果我們希望側(cè)滑菜單的區(qū)域能夠延伸到狀態(tài)欄存和,那么可以進(jìn)行以下三步的修改:

  • 第一步:修改Activitystyle,讓狀態(tài)欄透明衷旅,并修改狀態(tài)欄的顏色:
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- 修改狀態(tài)欄顏色 -->
        <item name="colorPrimaryDark">@android:color/holo_green_dark</item>
        <!-- 狀態(tài)欄透明 -->
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>
  • 第二步:給Activity根布局設(shè)置android:fitsSystemWindows="true"屬性
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <!-- 普通布局 -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:background="@android:color/holo_green_dark"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"/>
        <FrameLayout
            android:id="@+id/fl_content"
            android:background="@android:color/holo_orange_dark"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:text="我是內(nèi)容布局"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </FrameLayout>
    </LinearLayout>
    <!-- 側(cè)滑布局 -->
    <include layout="@layout/layout_drawer_normal"/>
</android.support.v4.widget.DrawerLayout>
  • 第三步:給側(cè)滑布局設(shè)置android:fitsSystemWindows="true"屬性
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_gravity="start"
    android:layout_width="200dp"
    android:background="@android:color/holo_green_dark"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <TextView
        android:text="我是側(cè)滑布局"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

通過(guò)以上三步捐腿,就可以達(dá)到沉浸式狀態(tài)欄的效果:


四、NavigationView

4.1 Navigation屬性

在使用DrawerLayout的時(shí)候柿顶,我們可以隨意定義側(cè)滑菜單的布局茄袖,NavigationView其實(shí)就是Google推薦的側(cè)滑布局應(yīng)該有的樣子,它的效果類(lèi)似于下面這樣:


我們先來(lái)看一個(gè)使用Navigation的簡(jiǎn)單例子:

<android.support.design.widget.NavigationView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/layout_drawer_navigation_header"
    app:menu="@menu/menu_navigation"
    app:itemIconTint="@android:color/white"
    app:itemBackground="@android:color/holo_green_dark"
    app:itemTextColor="@android:color/black">
</android.support.design.widget.NavigationView>

上面app各屬性對(duì)應(yīng)到下圖中就是這樣:


可以看到嘁锯,Navigation分為兩個(gè)部分:頭部和列表宪祥。

  • 頭部是app:headerLayout所指定的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:src="@drawable/ic_bg"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>
</LinearLayout>
  • 列表通過(guò)app:menu所指定:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/favorite"
        android:icon="@mipmap/ic_launcher"
        android:title="收藏"/>
    <item
        android:id="@+id/wallet"
        android:icon="@mipmap/ic_launcher"
        android:title="錢(qián)包"/>
    <item
        android:id="@+id/photo"
        android:icon="@mipmap/ic_launcher"
        android:title="相冊(cè)"/>
    <item
        android:id="@+id/file"
        android:icon="@mipmap/ic_launcher"
        android:title="文件"/>
</menu>

menu當(dāng)中的每個(gè)item就對(duì)應(yīng)于列表當(dāng)中的一項(xiàng),而itemicontitle則分別對(duì)應(yīng)列表項(xiàng)的圖標(biāo)和文字家乘,如果希望對(duì)item進(jìn)行分組蝗羊,那么可以采用group的方式來(lái)組織menu

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/group1">
        <item
            android:id="@+id/favorite"
            android:icon="@mipmap/ic_launcher"
            android:title="group1 - item1"/>
        <item
            android:id="@+id/wallet"
            android:icon="@mipmap/ic_launcher"
            android:title="group1 - item2"/>
    </group>
    <group android:id="@+id/group2">
        <item
            android:id="@+id/photo"
            android:icon="@mipmap/ic_launcher"
            android:title="group2 - item1"/>
        <item
            android:id="@+id/file"
            android:icon="@mipmap/ic_launcher"
            android:title="group2 - item2"/>
    </group>
</menu>

不同組之間就會(huì)被分割線(xiàn)隔開(kāi):


如果想要給某個(gè)分組添加標(biāo)題,那么可以采用subMenu的方式:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/group1">
        <item
            android:id="@+id/item1"
            android:icon="@mipmap/ic_launcher"
            android:title="group1 - item1"/>
        <item
            android:id="@+id/item2"
            android:icon="@mipmap/ic_launcher"
            android:title="group1 - item2"/>
    </group>
    <group android:id="@+id/group2">
        <item
            android:id="@+id/item3"
            android:icon="@mipmap/ic_launcher"
            android:title="group2 - item1"/>
        <item
            android:id="@+id/item4"
            android:icon="@mipmap/ic_launcher"
            android:title="group2 - item2"/>
    </group>
    <item
        android:id="@+id/item5"
        android:title="group3">
        <menu>
            <item
                android:id="@+id/item6"
                android:icon="@mipmap/ic_launcher"
                android:title="group3 - item1"/>
            <item
                android:id="@+id/item7"
                android:icon="@mipmap/ic_launcher"
                android:title="group3 - item2"/>
        </menu>
    </item>
</menu>

4.2 Navigation點(diǎn)擊監(jiān)聽(tīng)

4.2.1 列表點(diǎn)擊監(jiān)聽(tīng)

如果希望處理Navigation中列表的監(jiān)聽(tīng)耀找,那么可以使用現(xiàn)成的接口业崖,根據(jù)itemid來(lái)判斷是點(diǎn)擊的是列表中的哪一項(xiàng)。

mNavigationView = (NavigationView) findViewById(R.id.navigation);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Log.d("onSelected", "id=" + item.getItemId());
        return true;
    } 
});

4.2.2 頭部點(diǎn)擊監(jiān)聽(tīng)

NavigationView并沒(méi)有提供頭部點(diǎn)擊的監(jiān)聽(tīng)回調(diào)复罐,因此雄家,我們只能夠通過(guò)findViewById的方法找到對(duì)應(yīng)的View胀滚,對(duì)其設(shè)置監(jiān)聽(tīng)乱投,下面是整個(gè)headerLayoutNavigationView中的層次:

五、參考文獻(xiàn)

Android 5.0 之 NavigationView 的使用


更多文章剑刑,歡迎訪(fǎng)問(wèn)我的 Android 知識(shí)梳理系列:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末施掏,一起剝皮案震驚了整個(gè)濱河市茅糜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔑赘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙箍,死亡現(xiàn)場(chǎng)離奇詭異酥馍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)旨袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扇丛,“玉大人,你說(shuō)我怎么就攤上這事帆精∷砥牵” “怎么了卓练?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵购啄,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狮含,道長(zhǎng)爪幻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任疲陕,我火速辦了婚禮峰锁,結(jié)果婚禮上抛人,老公的妹妹穿的比我還像新娘妖枚。我一直安慰自己盅惜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著郊愧,像睡著了一般朴译。 火紅的嫁衣襯著肌膚如雪属铁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天焦蘑,我揣著相機(jī)與錄音盯拱,去河邊找鬼例嘱。 笑死狡逢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拼卵。 我是一名探鬼主播奢浑,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雀彼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了实柠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤草则,失蹤者是張志新(化名)和其女友劉穎炕横,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葡粒,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡份殿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗽交。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卿嘲。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖夫壁,靈堂內(nèi)的尸體忽然破棺而出拾枣,到底是詐尸還是另有隱情,我是刑警寧澤盒让,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布梅肤,位于F島的核電站,受9級(jí)特大地震影響邑茄,放射性物質(zhì)發(fā)生泄漏姨蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一肺缕、第九天 我趴在偏房一處隱蔽的房頂上張望左医。 院中可真熱鬧,春花似錦搓谆、人聲如沸炒辉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黔寇。三九已至,卻和暖如春斩萌,著一層夾襖步出監(jiān)牢的瞬間缝裤,已是汗流浹背屏轰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憋飞,地道東北人霎苗。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像榛做,于是被迫代替她去往敵國(guó)和親唁盏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc检眯,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評(píng)論 2 45
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程厘擂,因...
    小菜c閱讀 6,401評(píng)論 0 17
  • 我們已經(jīng)知道,arduino分為硬件和軟件锰瘸,顯而易見(jiàn)刽严,硬件部分就是板子,軟件部分是編程平臺(tái)避凝。編寫(xiě)編程程序舞萄,首先要找...
    之玖閱讀 772評(píng)論 0 1
  • 導(dǎo)讀 本文結(jié)合自己的實(shí)戰(zhàn)經(jīng)驗(yàn)佩谣,在各大著作原有基礎(chǔ)上加以增補(bǔ)把还、提煉实蓬,以低風(fēng)險(xiǎn)投資為前提茸俭,分別從入市準(zhǔn)備篇、交易篇安皱、持...
    布衣書(shū)生走天下閱讀 384評(píng)論 0 3