java - 更改标题组和第一项菜单之间的抽屉间距

标签 java android android-layout navigation-drawer navigationview

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

enter image description here

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

有什么想法吗?

最佳答案

There are NavigationView 创建的 RecyclerView 中的 4 种类型的项目:


    @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;
    }

The one you are interested in is SubheaderViewHolder. R.layout.design_navigation_item_subheader is the layout, that would be inflated for that 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"/>

如您所见,高度取自主题的 listPreferredItemHeightSmall 属性。但是您不能仅通过更改 listPreferredItemHeightSmall 的值来实现您的要求,因为 NormalViewHolder的项目 is also dependent在那个值上,因此改变它也会影响所有其他项目。

偷偷摸摸且不可靠的实现方式是在运行时使用 getIdentifier() 获取此 RecyclerView应用程序接口(interface)。自定义 RecyclerView 的 id 是 design_navigation_view .获取后,您可以从 RecyclerView 手动获取实际的 View(知道您需要的是 RecyclerView 的哪个子级)。然后您可以手动更改该 View 的高度。但这并不可靠,因为:

  • 对于许多这样的项目,处理起来并不容易,因为您无法知道实际展示了多少(好吧,您可以,但值得吗?)

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

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

关于java - 更改标题组和第一项菜单之间的抽屉间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293940/

相关文章:

android - 传入文本值并尝试显示时 Activity 崩溃

java - 带有套接字的 ObjectInputStreams 的其他问题

java - 自动填写 webview 中的字段

android - 未找到 SDK 位置 Android Studio + Gradle

android - 具有两个布局的 ListView

android - ViewStub vs View.GONE vs Inflate vs ViewSwitcher

java - Java 枚举类型中的 get() 方法

java - Dice Doubles Java 练习 - 逻辑错误

java - MySQL Java 更新语法

java - Android - 在解密中删除填充位