【发布时间】:2017-05-31 20:16:42
【问题描述】:
【问题讨论】:
-
请分享与您当前导航抽屉配置相关的代码
标签: java android android-layout navigation-drawer navigationview
【问题讨论】:
标签: java android android-layout navigation-drawer navigationview
There areNavigationView 创建的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;
}
您感兴趣的是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"/>
如您所见,高度取自主题的listPreferredItemHeightSmall 属性。但是你不能仅仅通过改变listPreferredItemHeightSmall的值来达到你的要求,因为NormalViewHolder的项目is also dependent在那个值上,因此改变它也会影响所有其他的项目。
实现此目的的偷偷摸摸且不可靠的方法是在运行时使用getIdentifier() API 获取此RecyclerView。自定义RecyclerView 的id 是design_navigation_view。获取后,您可以从RecyclerView 手动获取实际的View(知道RecyclerView 的哪个孩子是您需要的)。然后您可以手动更改该View 的高度。但这并不可靠,因为:
对于许多这样的项目来说处理起来并不容易,因为您无法知道实际显示了多少(嗯,您可以,但值得吗?)
李>您必须监听滚动事件并检测何时显示任何新的SubheaderViewHolder - 然后应用您的自定义高度。
我找不到足够的接缝来影响该物品的高度。您最好的选择是提供您的自定义布局作为NavigationView 的内容。
【讨论】:
根据我的经验,处理导航抽屉的最佳方法是让它显示完整的Fragment。这使您可以完全控制其布局和行为。
【讨论】:
(RecyclerView) ((NavigationView) findViewById(R.id.navigation)).getChildAt(0); 从 NavigationView 中获取 recyclerView,所以我的计划是从 recycler 中获取每个视图的视图,但目前我做不到它。你做过吗?
通过覆盖已在 android 支持库中设置的值来更改 dimen.xml 中的值。
<dimen name="design_navigation_padding_top_default"
tools:override="true">0dp</dimen>
<dimen name="design_navigation_separator_vertical_padding"tools:override="true">0dp</dimen>
<dimen name="design_navigation_padding_bottom"tools:override="true">0dp</dimen>
【讨论】: