更改标题组和第一个项目菜单之间的抽屉间隙

Gas*_*res 7 java android android-layout navigation-drawer navigationview

我需要更改标题组和第一个项目菜单之间的空间,这是一个例子:

在此输入图像描述

我看过很多例子和帖子,但只能改变所有项目的空间,我只需要更改标题组.

任何的想法?

azi*_*ian 9

4种类型的项目RecyclerViewNavigationView创建:


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case VIEW_TYPE_NORMAL:
                return new NormalViewHolder(mLayoutInflater, parent, mOnClickListener);
            case VIEW_TYPE_SUBHEADER:
                return new SubheaderViewHolder(mLayoutInflater, parent);
            case VIEW_TYPE_SEPARATOR:
                return new SeparatorViewHolder(mLayoutInflater, parent);
            case VIEW_TYPE_HEADER:
                return new HeaderViewHolder(mHeaderLayout);
        }
        return null;
    }

你感兴趣的是SubheaderViewHolder.R.layout.design_navigation_item_subheader是布局,将为此夸大ViewHolder.

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="?attr/listPreferredItemHeightSmall"
          android:gravity="center_vertical|start"
          android:maxLines="1"
          android:paddingLeft="?attr/listPreferredItemPaddingLeft"
          android:paddingRight="?attr/listPreferredItemPaddingRight"
          android:textAppearance="@style/TextAppearance.AppCompat.Body2"
          android:textColor="?android:textColorSecondary"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,高度取自主题的listPreferredItemHeightSmall属性.但是你只能通过改变值来实现你的要求listPreferredItemHeightSmall,因为NormalViewHolder's item 也依赖于那个值,因此改变它也会影响所有其他项.

实现这一目标的偷偷摸摸和不可靠的方法是RecyclerView使用getIdentifier()API 在运行时获取它.自定义的ID RecyclerViewdesign_navigation_view.获得后,您可以手动获取实际View信息RecyclerView(知道哪个孩子RecyclerView是您需要的孩子).然后你可以手动改变它的高度View.但这不可靠,因为:

  • 对于许多这样的物品来说处理它并不容易,因为你无法知道它们中有多少是实际显示的(好吧,你可以,但值得吗?)

  • 您必须侦听滚动事件并检测何时SubheaderViewHolder显示任何新内容 - 然后应用您的自定义高度.

我找不到足够的接缝来影响该物品的高度.您最好的选择是提供自定义布局作为内容NavigationView.


Gas*_*res 3

感谢azizbekian,他的回答给了我一个好主意(也许不是最好的,但就我而言,实现起来更简单、更快速)。基本上,我添加一个具有相同名称的布局(这将覆盖它)。之后我改变了我需要的一切,所以结果是这样的:

在此输入图像描述

在此输入图像描述