【问题标题】:Adding multiple Views to NavigationDrawer向 NavigationDrawer 添加多个视图
【发布时间】:2014-08-02 12:40:16
【问题描述】:

我正在处理NavigationDrawer,它的第一个孩子是FrameLayout,第二个孩子是ListView。我已经成功地以编程方式填充了我想要的项目列表。现在,我想要一点点修改。我希望在导航抽屉内填充另一个列表,但我希望它是底部对齐的。我看了几个例子,但无法让它发挥作用。 你能告诉我怎样才能让它工作吗? 这是我的主要导航布局 (activity_navigation.xml)

<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" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

        <ListView
            android:id="@+id/left_drawer"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:background="#111"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

我的个人列表项目文件 (listview_item_row.xml)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/navigation_drawer_list_item_selector"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageViewIcon"
        android:paddingRight="10dp"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:textColor="#ffffff" />

</RelativeLayout>

在我的活动类中,我以这种方式以编程方式设置布局:

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);

ObjectDrawerItem[] drawerItem = new ObjectDrawerItem[3];
drawerItem[0] = new ObjectDrawerItem(R.drawable.ic_speedometer, mNavigationDrawerItemTitles[0]);
drawerItem[1] = new ObjectDrawerItem(R.drawable.ic_place, mNavigationDrawerItemTitles[1]);
drawerItem[2] = new ObjectDrawerItem(R.drawable.ic_price, mNavigationDrawerItemTitles[2]);

DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.listview_item_row, drawerItem);
mDrawerList.setAdapter(adapter);        
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

如何按照创建当前列表的方式制作另一个列表? 我希望它看起来像这样: (图片取自this question

对 Android 世界来说是一种新事物。先感谢您。 更新:我能够将我的 ListView 嵌套在一个 LinearLayout 中,然后在该 LinearLayout 中创建另一个 ListView。现在,如何将 ListView 项分配给底部的 ListView 控制器?

【问题讨论】:

    标签: android xml navigation-drawer


    【解决方案1】:

    为您的抽屉使用RelativeLayout 而不是ListView 本身,将您的列表视图嵌入其中并与顶部对齐,然后将另一个ListView 插入其中并分配给底部。

    例如:

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <RelativeLayout
        android:id="@+id/left_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111" >
    
        <ListView
            android:id="@+id/top_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParent_left="true"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp" />
    
        <ListView
            android:id="@+id/bottom_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParent_left="true"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp" />
    

    【讨论】:

    • 做到了。但是当我通过 ListView mDrawerList = (ListView) findViewById(R.id.left_drawer); 时,我收到了一个强制转换异常。
    • 如果必须查看那里的代码才能理解异常,这种方法确实有效。
    • 当我添加一个 RelativeLayout 作为 ListView 的父级时,我得到了 LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams,并且在该布局中,添加了另一个带有 android:layout_alignParentBottom="true" 的 RelativeLayout
    • 您能否为您的解决方案提供一个示例 XML 布局?我怎样才能将它添加到抽屉而不引起异常?
    • 刚刚用一个例子修改了我的答案。 RelativeLayout 是您的“左抽屉”容器。您的列表在其中并放在顶部和底部。
    猜你喜欢
    • 2013-01-27
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多