自定义导航抽屉中的导航视图仅包含图像视图

时间:2015-07-24 22:07:28

标签: android navigation-drawer

我有一个应用程序,我在其中使用导航抽屉,在此我使用导航视图。代码段如下

<android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:menu="@menu/drawer"
        />

在菜单中我有这个 drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">

        <item
            android:id="@+id/home"
            android:checked="false"
            android:icon="@drawable/home"
            android:title="@string/home_string" />

        <item
            android:id="@+id/offer"
            android:checked="false"
            android:icon="@drawable/offer_"
            android:title="@string/offer_string" />

        <item
            android:id="@+id/take"
            android:checked="false"
            android:icon="@drawable/take"
            android:title="@string/take_string" />

        <item
            android:id="@+id/share"
            android:checked="false"
            android:icon="@drawable/share"
            android:title="@string/share_string" />

        <item
            android:id="@+id/offer_status"
            android:checked="false"
            android:icon="@drawable/my_status"
            android:title="@string/offer_status" />


        <item
            android:id="@+id/about_us"
            android:checked="false"
            android:icon="@drawable/about_us"
            android:title="" />


    </group>
</menu>

这是完美的工作,因为图标显示在左侧,相应的文本显示在导航抽屉中的图像视图的右侧。 但是现在我必须在右边的文本中使用整个图像,因为我的新图像中包含了名称,所以不需要将相应的字符串放在右边。

但如果我只是替换他们挤压的图像,我认为因为新的导航菜单有其图像限制。如果我从项目中删除字符串,它会给我错误,因为项目必须有标题字符串。所以我把空字符串,但它做的相同,我的意思是它挤压图像。

那么我应该怎么做才能在完整的单行导航菜单中显示完整的图像?任何帮助和想法请分享

1 个答案:

答案 0 :(得分:1)

我担心如果您想要使用此菜单自定义任何内容,您必须自己实施菜单,而不是使用NavigationView。我个人在LinearLayout内部使用垂直ScrollView,并将样式应用于所有TextView和ColorFilters以对图标进行着色。

以下是一些建议:

  • LinearLayout内的ScrollView开始,为每个具有正确Drawable的部分添加一个可选标题,后跟一个ImageView
  • 在代表某个部分的每个ImageView上设置唯一ID。
  • 在代表某个部分的每个View.OnClickListener上设置一个ImageView。单击视图时,使用视图ID确定用户选择了哪个部分。

要使用原色为当前部分Drawable着色,请使用如下代码:

int primaryColor = getResources().getColor(R.color.color_primary);
sectionImageView.getDrawable().mutate().setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN);

(调用setColorFilter(null)将其重新设置为正常颜色)

如果您想要更精细的代码,请查看&#34; FOSDEM Companion&#34;的源代码: