导航抽屉中的子菜单

时间:2014-03-21 12:28:05

标签: android navigation-drawer

我正在尝试找到如何在导航抽屉中创建子菜单的解决方案。我将是iOS应用程序video

中展示示例的最佳选择

我没有在导航抽屉文档中看到任何方法来执行此类布局动画。我将不胜感激任何帮助

1 个答案:

答案 0 :(得分:3)

在android SDK上的导航抽屉里没有这样的概念叫做子菜单。

但也有好消息 - 因为导航抽屉最终是布局容器 - 没有任何东西可以阻止你从主机内部任何视图或嵌套布局容器而不是主机内部只有ListView,因此 - 您也可以使用Fragments

如果你这样做 - 你可以在它们之间执行片段交易以滑动到代表子菜单的另一个片段......如果你将片段事务动画设置为“你也将免费获得”片段事务动画用一个。

每个片段都会显示代表不同菜单屏幕的ListView(或其他......)

添加你自己的UI后退按钮标题并实现onClick回调以执行片段事务到“主菜单”片段,你就得到了你想要的。

这是您的主要活动UI 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">
<!-- The main content view -->
<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
<!-- The navigation drawer -->
<FrameLayout android:id="@+id/left_drawer_layout_fragment_conatiner"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:background="#111"/>

如您所见,我将traditional navigation drawer ListView替换为FrameLayout。左侧抽屉可以替换为您想要的任何其他视图或自定义组件,也可以充当片段容器。

编辑

@Meryl要求我根据documentation example如何使用Fragment作为抽屉菜单进行展示。所以,假设您希望您的菜单看起来与文档示例完全相同(因为您可以创建任何您希望的UI,这根本不是必须的.​​.)这将是将其转换为Fragment的方式:

fragment_menu.xml布局文件:

<ListView android:id="@+id/list_view"
    xmlns:android="http://schemas.android.com/apk/res/android"        
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#111"/>

FragmentMenu java类:

public class FragmentMenu extends Fragment {

private ListView mListView;

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   savedInstanceState) {
    return inflater.inflate(R.layout.fragment_menu, null);
  }

  @Override
  public void onViewCreated(View view, Bundle savedInstanceState) {
      super.onViewCreated(view, savedInstanceState);

      mListView = (ListView)view.findViewById(R.id.list_view);

      // Set the adapter for the list view
      mListView.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles));
      // Set the list's click listener
      mListView.setOnItemClickListener(new DrawerItemClickListener());
  }
}

FragmentMenu附加到Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView...


    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
                   .replace(R.id.left_drawer_layout_fragment_conatiner, new FragmentMenu());
                   .commit();
}

所有其余的应该是stat几乎相同..当然 - 文档中的代码创建菜单列表并在活动中设置适配器是不再需要的,因为它是在片段内部实现的。