Gas*_*res 7 java android android-layout navigation-drawer navigationview
我需要更改标题组和第一个项目菜单之间的空间,这是一个例子:
我看过很多例子和帖子,但只能改变所有项目的空间,我只需要更改标题组.
任何的想法?
有 4种类型的项目RecyclerView是NavigationView创建:
@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 RecyclerView是design_navigation_view.获得后,您可以手动获取实际View信息RecyclerView(知道哪个孩子RecyclerView是您需要的孩子).然后你可以手动改变它的高度View.但这不可靠,因为:
对于许多这样的物品来说处理它并不容易,因为你无法知道它们中有多少是实际显示的(好吧,你可以,但值得吗?)
您必须侦听滚动事件并检测何时SubheaderViewHolder显示任何新内容 - 然后应用您的自定义高度.
我找不到足够的接缝来影响该物品的高度.您最好的选择是提供自定义布局作为内容NavigationView.
感谢azizbekian,他的回答给了我一个好主意(也许不是最好的,但就我而言,实现起来更简单、更快速)。基本上,我添加一个具有相同名称的布局(这将覆盖它)。之后我改变了我需要的一切,所以结果是这样的:
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |