Я реализовал TabLayout с ViewPager в Activity. При выборе разных вкладок Viewpager заменяет страницу фрагментом. Но теперь мой вариант использования - реализовать панель навигации внутри Fragment.xml, но я не могу этого сделать.
Когда я пишу DrawerLayout в качестве корневого макета в Fragment.xml, а дочерний макет - это AppBarLayout и FrameLayout.
Состав:
<DrawerLayout>
<AppBarLayout><ToolBarLayout/><AppBarLayout>
<FrameLayout/>
<Navigation Menu/>
</DrawerLayout>
Вся панель инструментов из разных вкладок находится над экраном, и ее высота не в действии. Высота BarSize и высота ToolBar уменьшаются, а TabLayout уменьшается.
понимая, что макет ящика будет размещен внутри фрагмента, тогда просто получите доступ к этому фрагменту через макет 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 для панели навигации похоже. это гарантирует, что вы разместите свой ящик и его макеты под макетом с вкладками, который вы уже видите.
затем на вашем фрагменте внутри 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 ToolBar находится первый дочерний элемент, а мой Tablayout находится внизу, который из ActionBarSize, а оставшаяся часть - DrawerLayout шириной 100dp, а высота - Match Parent и layout_above TabLayout. Итак, после ширины 100dp мой frameLayout находится.
Не могли бы вы показать нам свои макеты?