最佳答案
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/