我想在我的Android应用程序中添加一个没有图标的菜单项条目到导航抽屉。
我已在NavigationDrawer查看了样本 并阅读Android Developer training文章中的教程。
我编辑了示例菜单以添加新的菜单项"我的文本1"和"我的文字2"按照此图片后面的此xml文件:
<?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;如左图所示对齐,如图所示
但我想保留其他项目的图标,只需添加一个文本项目,我希望有一些参数不允许组中的图标菜单项。
我尝试使用android_icon="@android/color:transparent"
,但这也无法解决问题。
我不想为我的菜单项提供任何图标,但我希望文本对齐到左边。这可以实现吗?如果是,怎么样?
答案 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>