Is it possible to use something other than a listview as sliding drawer in drawerlayout

后端 未结 4 1588
陌清茗
陌清茗 2020-12-13 00:36

I would like to have for example a LinearLayout or a RelativeLayout sliding from the left of the screen instead of a lone ListView.

相关标签:
4条回答
  • 2020-12-13 01:00

    Make sure you pass correct object (your LinearLayout called mDrawerLinear) for methods like isDrawerOpen, closeDrawer etc. This line solved my ClassCastException:

    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLinear);
    
    0 讨论(0)
  • 2020-12-13 01:04

    Yes it is possible to have any view as the sliding part of a drawer layout. I prefer declaring a FrameLayout as the drawer and replacing it with my fragment, and it runs just fine.

    The error you are getting is probably due to some other reason in the Java part of your implementation.

    0 讨论(0)
  • 2020-12-13 01:09

    This will work if you move both the android:id="@+id/left_drawer" (or create a new id) and set the gravity.

    The id move (or new one) is so the reference is correct so you call closeDrawer() on it and not the child views.

    But most importantly, the DrawerLayout requires that element to have a android:layout_gravity set on it, as you mentioned.

    Finally, you need to call close closeDrawer() on the base view, the one with the required gravity.

    Example:

    <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:background="@android:color/white">
    
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <LinearLayout 
            android:id="@+id/left_drawer"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:orientation="vertical">
    
            <ImageView 
                android:id="@+id/ivwLogo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/video_icon" />
    
            <ListView 
                android:id="@+id/left_drawer_child"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:choiceMode="singleChoice"
                android:divider="@android:color/transparent"
                android:dividerHeight="0dp"
                android:background="@android:color/white" />
    
        </LinearLayout>
    </android.support.v4.widget.DrawerLayout>
    

    In code:

    DrawerLayout mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout)
    LinearLayout mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);
    ListView mDrawerListChild = (ListView) findViewById(R.id.left_drawer_child);
    
    ...
    
    mDrawer.closeDrawer(mDrawerLinear);
    

    (This is basically what @Karakuri posted, but with a more complete explanation and example.)

    0 讨论(0)
  • 2020-12-13 01:12

    Try moving android:id="@+id/left_drawer" to the LinearLayout instead of the ListView

    0 讨论(0)
提交回复
热议问题