NavigationView修改菜单item项的布局参数

NavigationView修改item项的布局参数

最近做的项目中,该项目是pos机上面的,项目中用到了NavigationView,但是出来之后发现侧滑菜单的ui效果不满足,每个菜单条目的整体高度太小,需要调整。上网找资料一直没找到。于是乎自己折腾一天搞出来了。代码如下:

 private void resetItemLayout(NavigationView navigationView) {
        //通过反射拿到menu的item布局。修改布局参数
        try {
            Field mPresenter = NavigationView.class.getDeclaredField("mPresenter");
            mPresenter.setAccessible(true);
            //此处mPresenter.get(navigationView)会得到一个NavigationMenuPresenter对象,但是该类是@hide的。所以此处直接再拿其内部的NavigationMenuView。该类也是@hide的。需要注意的是,该类继承自RecyclerView。菜单的布局也就是由其完成的。
            Field mMenuView = mPresenter.get(navigationView).getClass().getDeclaredField("mMenuView");
            mMenuView.setAccessible(true);
            //由于NavigationMenuView是隐藏类。此处用其父类。
            RecyclerView recycler = (RecyclerView) mMenuView.get(mPresenter.get(navigationView));
            for (int i = 0; i < recycler.getAdapter().getItemCount(); i++) {
                RecyclerView.ViewHolder holder = recycler.findViewHolderForLayoutPosition(i);
                //这里看实际项目了。我的项目中添加了一个head。
                if (i == 0 || holder == null)//因为这里有一个header。所以要先排除第一个
                    continue;
                //剩下的就是修改整体布局参数了。
                ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
                params.width = ViewGroup.LayoutParams.MATCH_PARENT;
                params.height = getResources().getDimensionPixelOffset(R.dimen.drawer_item_height);
                holder.itemView.setLayoutParams(params);
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

当然,以上是自己瞎折腾的。如果大家有什么好的办法,还请留言告知!多谢!

你可能感兴趣的:(Android)