В соответствии с спецификациями Material Design ширина навигационного ящика на мобильных устройствах должна быть
side nav width = ширина экрана - высота строки приложения
Как это реализовать на android?
У меня есть два частичных решения. Во-первых, это хакерский способ: в содержательной деятельности я помещаю этот код:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR1) { final Display display = getWindowManager().getDefaultDisplay(); final Point size = new Point(); display.getSize(size); final ViewGroup.LayoutParams params = mDrawerFragment.getView().getLayoutParams(); params.width = size.x - getResources().getDimensionPixelSize( R.dimen.abc_action_bar_default_height_material ); mFragmentUserList.getView().setLayoutParams(params); }
Это, однако, вызывает второй цикл компоновки и не работает в пряниках: это не оптимально.
Второе решение включает в себя добавление пробела между фрагментом и drawerLayout. Однако он смещает тень и место, где пользователь может нажать, чтобы вернуться в основное приложение. Он также падает, когда нажимается значок "hamburguer". Не оптимально.
Есть ли лучшее решение, желательно одно, которое включает стили и xml?