Android 高大上的側滑菜單DrawerLayout,解決了不能全屏滑動的問題

來源:互聯網
上載者:User

標籤:sync   參數   簡單   layout   open   ddd   res   comm   des   


DrawerLayout預覽DrawerLayout主要功能就是 實現側滑菜單效果的功能,並且可以通過增加一些設定來實現高大上的效果,那麼就請看動態圖:
 

注意左上方那個表徵圖,有木有很好玩,哈哈...

接下來就介紹如何?這一功能1. 在項目對應的build.gradle中添加依賴
    dependencies {        ...//其他代碼        compile ‘com.android.support:appcompat-v7:24.0.0‘        compile ‘com.android.support:design:24.0.0‘           ...//其他代碼    }
2. 添加ToolBar,建立toolbar.xml檔案
    <?xml version="1.0" encoding="utf-8"?>        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"            xmlns:app="http://schemas.android.com/apk/res-auto"            android:layout_width="wrap_content"            android:layout_height="wrap_content">        <android.support.v7.widget.Toolbar            android:id="@+id/toolbar"            android:clipToPadding="true"            android:fitsSystemWindows="true"            android:layout_width="match_parent"            android:layout_height="wrap_content"            app:title="資訊"            app:titleTextColor="#fff">        </android.support.v7.widget.Toolbar>    </RelativeLayout>
3. 在main.xml中添加DrawerLayout
    <?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="match_parent"        android:orientation="vertical">        <!-- 添加ToolBar -->        <include layout="@layout/toolbar"/>        <!--添加DrawerLayout-->        <android.support.v4.widget.DrawerLayout            android:id="@+id/drawerlayout"            android:layout_width="match_parent"            android:layout_height="match_parent">            <!-- 一般第一個位置的代表 主內容 -->            <FrameLayout                android:id="@+id/main"                android:layout_width="match_parent"                android:layout_height="match_parent">            </FrameLayout>            <!-- 左側菜單(設定layout_gravity 為left) -->            <RelativeLayout                android:id="@+id/left"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_gravity="left">            </RelativeLayout>            <!-- 右側菜單(設定layout_gravity 為right) -->            <RelativeLayout                android:id="@+id/right"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_gravity="right">            </RelativeLayout>        </android.support.v4.widget.DrawerLayout>    </LinearLayout>

DrawerLayout一般分為三個部分 主內容,左側菜單,右側菜單
每個部分的內容自行設定,我是採用Fragment方式設定內容,這裡僅供參考

    //建立Fragment,具體內容我就不詳細說了    fragmentMain = new FragmentMain();    //新增內容,比較簡單的    getSupportFragmentManager().beginTransaction().replace(R.id.main, fragmentMain).commit();

到此為止已經初步實現了側滑菜單的功能,來看一下效果


DrawerLayout初效果.gif然後,就是給側滑按鈕添加效果了1. 在此之前要進行view的初始化
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);    toolbar = (Toolbar) this.findViewById(R.id.toolbar);    setSupportActionBar(toolbar);

2. 通過ActionBarDrawerToggle來完成效果,操作很簡單

    mToggle = new ActionBarDrawerToggle(HomeActivity.this,                                         mDrawerLayout,                                         toolbar,                                         R.string.open,                                          R.string.close);    mToggle.syncState();    mDrawerLayout.addDrawerListener(mToggle);

這樣就結束了

最後就是解決DrawerLayout不能全屏滑動的問題
private void setDrawerLeftEdgeSize (Activity activity, DrawerLayout drawerLayout, float displayWidthPercentage) {    if (activity == null || drawerLayout == null) return;    try {        // 找到 ViewDragHelper 並設定 Accessible 為true        Field leftDraggerField =                drawerLayout.getClass().getDeclaredField("mLeftDragger");//Right        leftDraggerField.setAccessible(true);        ViewDragHelper leftDragger = (ViewDragHelper) leftDraggerField.get(drawerLayout);        // 找到 edgeSizeField 並設定 Accessible 為true        Field edgeSizeField = leftDragger.getClass().getDeclaredField("mEdgeSize");        edgeSizeField.setAccessible(true);        int edgeSize = edgeSizeField.getInt(leftDragger);        // 設定新的邊緣大小        Point displaySize = new Point();        activity.getWindowManager().getDefaultDisplay().getSize(displaySize);        edgeSizeField.setInt(leftDragger, Math.max(edgeSize, (int) (displaySize.x *                displayWidthPercentage)));    } catch (NoSuchFieldException e) {    } catch (IllegalArgumentException e) {    } catch (IllegalAccessException e) {    }}

直接調用這個方法即可!最後一個參數 傳 1,即可實現全屏滑動。如果你想讓右側菜單也是全屏,只要將對應的 "mLeftDragger" 改為 "mRightDragger"。

Android 高大上的側滑菜單DrawerLayout,解決了不能全屏滑動的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.