1. 程式人生 > >DrawableLayout實現仿QQ側滑選單

DrawableLayout實現仿QQ側滑選單

由於移動裝置的螢幕限制,在主介面同時顯示很多東西是不大顯示的事,因而很多時候我們都會把一些功能選項放在選單。但傳統的選單介面比較單調,而且互動體驗並不是很好,因此,側滑選單也因此應運而生。

實現側滑選單的方式有很多種,包括自定義控制元件,使用開源庫SlideMenu等,但Google在MaterialUI中推出使用DrawableLayout實現側滑選單的功能。

既然市面上已經有了不少側滑選單的實現方式,那DrawableLayout又有什麼優勢呢?筆者在使用的時候覺得有以下幾點值得我們去使用DrawableLayout。

1、介面美觀。這也是很多人覺得MaterialUI推出後Android介面並不比IOS差的原因了。

2、使用簡單。相比自定義一個側滑選單的成本低很多。

那下面我們就來看一下怎麼使用DrawableLayout

1、佈局。在介面中放入兩個子的佈局,第一個子佈局是主介面,第一個子佈局是左側滑選單,當然我們也可以在右邊也放一個側滑選單,不過目前市面上似乎沒見過有左右側滑選單的APP,這個視實際情況決定。下面是activity_main.xml的程式碼

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout     
    xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent">
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout
android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<include layout="@layout/title_bar" /> <FrameLayout android:id="@+id/fl_main" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout> </FrameLayout> <ListView android:id="@+id/list_view_menu" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="#ffffff" android:divider="#ffffff"></ListView> </android.support.v4.widget.DrawerLayout>

以上是筆者使用DrawableLayout實現的一個仿知乎日報側滑選單的主介面。從程式碼可以清楚的看到最外層佈局使用的是DrawableLayout,然後多了xmlns:app=”http://schemas.android.com/apk/res-auto”這麼一行程式碼,關於名稱空間的這裡不去講解,有興趣的讀者可以自行搜尋,只有加了這一行程式碼後我們才可以使用MaterialUI的新屬性。然後就是第二個子佈局筆者使用了一個ListView控制元件,當然也可以使用其他控制元件。細心的讀者可能會發現多了這麼一行程式碼android:layout_gravity=”start”。這個屬性是必須制定的,如果去掉,第二個子控制元件就會覆蓋在第一個控制元件上了。這樣子就完成了側滑選單就完成了。

細心的讀者肯恩貴發現,QQ點選左側頭像的時候也可以調出側滑選單,下面我們就在Java中實現這一功能。

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawerLayout;
    private ImageButton menu_title_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        menu_title_bar = (ImageButton)findViewById(R.id.menu_title_bar);
        menu_title_bar.setOnClickListener(new MyOnClickListener());
    }
    class MyOnClickListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case  R.id.menu_title_bar:
                  drawer_layout.openDrawer(GravityCompat.START);
                    break;
            }
        }
    }
}

這裡為了簡潔,筆者把其他程式碼刪去了,只留下呼叫側滑選單的方法。這關鍵的就是這一句

drawer_layout.openDrawer(GravityCompat.START);

傳進去的引數要跟在佈局檔案中定義的一致。

以下是筆者根據知乎日報API做的一個介面效果圖。

這裡寫圖片描述