没有图标的android导航抽屉项目,仅显示文本

时间:2017-03-09 09:42:01

标签: android navigation-drawer menuitem drawerlayout android-navigation-drawer

我想在我的Android应用程序中添加一个没有图标的菜单项条目到导航抽屉。

我已在NavigationDrawer查看了样本 并阅读Android Developer training文章中的教程。

我编辑了示例菜单以添加新的菜单项"我的文本1"和"我的文字2"按照此图片后面的此xml文件:shift right

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_camera"
        android:icon="@drawable/ic_menu_camera"
        android:title="Import" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/nav_slideshow"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="Slideshow" />
    <item
        android:id="@+id/nav_manage"
        android:icon="@drawable/ic_menu_manage"
        android:title="Tools" />
    <item
        android:id="@+id/example"
        android:title="My Text 1" />
</group>

<item android:title="Communicate">
    <menu>
        <item
            android:id="@+id/nav_share"
            android:icon="@drawable/ic_menu_share"
            android:title="Share" />
        <item
            android:id="@+id/nav_send"
            android:icon="@drawable/ic_menu_send"
            android:title="Send" />
        <item
            android:id="@+id/sample"
            android:title="My Text 2" />
    </menu>
</item>

</menu>

如果我删除两行宣布&#34;分享&#34;和&#34;发送&#34;,然后&#34;我的文字2&#34;如左图所示对齐,如图所示

shift left

但我想保留其他项目的图标,只需添加一个文本项目,我希望有一些参数不允许组中的图标菜单项。

我尝试使用android_icon="@android/color:transparent",但这也无法解决问题。

我不想为我的菜单项提供任何图标,但我希望文本对齐到左边。这可以实现吗?如果是,怎么样?

3 个答案:

答案 0 :(得分:0)

为导航抽屉创建自定义布局,并根据需要执行任何操作:

这是我的抽屉布局自定义设计的xml文件 -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HomeActivity">

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- The main content view -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include
                android:id="@+id/rl_topbar"
                layout="@layout/inflate_topbar" />

            <FrameLayout
                android:id="@+id/fl_content_frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/rl_topbar" />
        </LinearLayout>

        <!-- The navigation drawer -->
        <LinearLayout
            android:id="@+id/ll_navbar_container"
            android:layout_width="@dimen/navbar_width"
            android:layout_height="match_parent"
            android:layout_gravity="right"
            android:background="@color/color_255_255_255"
            android:orientation="vertical">

            <!--This is my custom layout how I want, you can design as you want and include it-->
            <include
                android:id="@+id/ll_navbar"
                layout="@layout/inflate_navbar" />
        </LinearLayout>

    </android.support.v4.widget.DrawerLayout>

    <!--Add progress bar-->
    <!--Add other views-->
</RelativeLayout>

现在,您可以在此xml文件的活动中获取视图的引用并轻松进行点击事件或其他更改。

答案 1 :(得分:0)

一个简单的替代方法是使用自定义布局而不是菜单。

这将是一个简单的改变。简单地说,您可以像在任何其他布局中一样创建自定义布局,而不是在NavigationView中指示相应的菜单,而不是使用app:menu="@menu/drawer_view"属性。

您只需遵循Activity

中的布局结构即可
<android.support.design.widget.CoordinatorLayout

     <android.support.v4.widget.DrawerLayout

           <RelativeLayout/>

           <LinearLayout/>

    </android.support.v4.widget.DrawerLayout>

</android.support.design.widget.CoordinatorLayout>

教程的结构与此布局的结构之间没有根本区别,除了我选择使用LinearLayout而不是菜单资源作为侧边菜单(显然侧视图的rootlayout将由您自行决定,但对于您的用例LinearLayout最合适。)。

示例

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorAccent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/drawer_layout"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:fitsSystemWindows="true">

            <include layout="@layout/content_activity_main"/>

            <include layout="@layout/layout_side_view"/>

    </android.support.v4.widget.DrawerLayout>
</android.support.design.widget.CoordinatorLayout>

您将在此布局中注意到,之前的结构中显示了两个include语句来代替布局。一个用于活动的实际内容,一个用于侧视图。我将在下面向您展示您所请求的用例布局的示例:

<强> layout_side_view.xml

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 <LinearLayout
    android:orientation="vertical"
    android:background="@color/white"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <TextView
        android:id="@+id/with_icon"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textColor="@color/black"
        android:drawableLeft="@drawable/icon"
        android:drawableStart="@drawable/icon"
        android:drawablePadding="15dp"
        android:gravity="start|center_vertical"
        android:text="TextView 1"/>

</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:background="@color/white"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <TextView
        android:id="@+id/without_icon"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textColor="@color/black"
        android:gravity="start|center_vertical"
        android:text="Text View 2"/>

</LinearLayout>


</LinearLayout>  

然后,您只需自定义您的布局,并在左侧使用带有图标的TextView使用DrawableLeft | DrawableStart属性,如果您不想要图标,则只是不使用它。

我希望这会有所帮助。

注意

我会调查DrawerLayout做了什么以及为什么它的结构是这样的,内容在菜单下面是出于什么原因?查看这些内容有助于您了解可以根据自己的喜好自定义布局结构。

答案 2 :(得分:0)

此处没有自定义布局。

您必须使用ID(甚至是虚拟)创建第二个,然后在此组中放置所有而不显示任何图标。

注意:每次组ID更改时,Android都会添加一个分隔线。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  tools:showIn="navigation_view">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_menu_dummy1"
        android:title="@string/nav_menu_home"/>
    <item
        android:id="@+id/nav_profile"
        android:icon="@drawable/ic_menu_dummy2"
        android:title="@string/nav_menu_profile"/>
</group>

<group android:id="@+id/dummy">
    <item
        android:id="@+id/nav_info"
        android:title="@string/nav_menu_info"/>
    <item
        android:id="@+id/nav_settings"
        android:title="@string/nav_menu_settings"/>
</group>