【问题标题】:How to implement Navigation Drawer inside a Fragment如何在片段中实现导航抽屉
【发布时间】:2018-07-06 18:10:55
【问题描述】:

我在 Activity 上实现了 TabLayoutViewPager。在选择不同的选项卡时,Viewpager 将页面替换为片段。但是,现在我的用例是在Fragment.xml 内实现一个导航抽屉,但我无法做到。

当我将DrawerLayout 作为Fragment.xml 中的根布局编写时,子布局是AppBarLayoutFrameLayout

结构:

<DrawerLayout>
    <AppBarLayout><ToolBarLayout/><AppBarLayout>
    <FrameLayout/>
    <Navigation Menu/>
</DrawerLayout>

来自不同选项卡的所有工具栏都在屏幕上方,它的高度不在 actionBarSize 高度,ToolBar 高度缩小,TabLayout 缩小。

【问题讨论】:

  • 你能告诉我们你的布局吗?

标签: android navigation android-viewpager fragment navigation-drawer


【解决方案1】:

了解抽屉布局将放置在片段内,然后只需通过 xml 布局访问该片段并将抽屉内部添加到布局中。

我将遵循的结构如下(伪代码):

<relativelayout>
name:outside-container-for-drawerlyout
height: ... and width: ...
 <relativelayout>
  name:actual-continer-for-drawerlayout
  height: ... and width: ...
  <!-- place drawer layout code here -->
  <drawerayout>
  height: ... and width: ...
   <!-- nest navigation view code here -->
   <navview>
    height: ... and width: ...
   </navview>
  </drawerlayout>
 </relativelayout>
</relativelayout>

查看文档,android documentation reference for navigation drawer 类似。 这将确保您将抽屉及其布局放置在您已经看到的选项卡式布局下方。

然后,在 java 中的片段上:

@Override
public View onCreateView(...) {
...
rootView = inflater.inflate(R..., container, false);
handleAccountNavigator();
return rootView;
}
private void handleAccountNavigator(){
this.mDrawerLayout = this.rootView.findViewById(R.id.drawer_layout);
this.mNavigationView = this.rootView.findViewById(R.id.nav_view);
new Handler().post(new Runnable()... to handle drawer actions.
}

【讨论】:

  • 在 Fragment.xml 工具栏是第一个子项,我的 Tablayout 位于 ActionBarSize 的底部,其余部分是 100dp 宽度和高度的 DrawerLayout,匹配父项和 layout_above TabLayout。所以在 100dp 宽度之后,我的 frameLayout 驻留。
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2018-01-16
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多