Android NaviagtionDrawer项目文本对齐方式

时间:2017-04-19 11:59:11

标签: android android-studio navigation-drawer android-xml

我创建的NavigationView就像这样 My Navigation View ScreenShot

,这是我的xml代码

<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:id="@+id/top_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".Dashbored">

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

<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tool_bar"
android:elevation="7dp"
android:fitsSystemWindows="true"
tools:openDrawer="end">


<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

</FrameLayout>


</LinearLayout>

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#0284fe"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header"
app:itemBackground="@drawable/drawer_backg"
app:itemIconTint="@color/drawer_item"
app:itemTextAppearance="@style/NavDrawerTextStyle"
app:itemTextColor="@color/windowBackground"
app:menu="@menu/main_drawer" />


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

我想像这样设置项目文本对齐中心

I need a output like this

这是我的菜单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_inspec_rpt"
android:title="INSPECTION REPORTS"
/>
<item
android:id="@+id/nav_action"
android:title="ACTION ITEMS"
/>
<item
android:id="@+id/nav_appoint"
android:title="APPOINTMENTS" />
<item
android:id="@+id/nav_applst"
android:title="MAIN APPOINTMENTS" />
<item
android:id="@+id/nav_logout"
android:title="LOG OUT" />
</group>

我想得到像第二张图片的输出,请帮帮我,我试着在style.xml中给出这样的样式,但我不知道如何对齐文本,我用谷歌尝试了另一种方式,但没有运气。 :(

<style name="NavDrawerTextStyle" parent="Base.TextAppearance.AppCompat">
<item name="android:textColor">@color/colorPrimaryDark</item>
<item name="android:textSize">16dp</item>
<item name="android:fontFamily">serif</item>
<item name="android:textStyle">bold</item>
</style>

由于

6 个答案:

答案 0 :(得分:4)

您可以使用活动中的center-align动态SpannableString菜单项:

int positionOfMenuItem = 0; //or any other postion

MenuItem item = menu.getItem(positionOfMenuItem);

SpannableString s = new SpannableString(settingsItemTitle);

s.setSpan(new AlignmentSpan.Standard(Alignment.ALIGN_CENTER), 0, s.length(), 0);

item.setTitle(s);

答案 1 :(得分:1)

我创建了Listview而不是菜单。

这是我的xml代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/top_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".Dashbored">

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

</include>


<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/tool_bar"
    android:elevation="7dp"
    android:fitsSystemWindows="true"
    tools:openDrawer="end">


    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

        </FrameLayout>


    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:maxWidth="250dp"
        android:layout_gravity="end"
        android:background="#0284fe"
        android:fitsSystemWindows="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include
                android:id="@+id/navheader"
                layout="@layout/nav_header" />

            <ListView
                android:id="@+id/lst_menu_items"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:divider="@null"
                android:dividerHeight="0dp"

                />
        </LinearLayout>

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


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

然后我使用了自定义adpater和textview,然后我对齐了我的文本重力中心。

这是我的最终输出 This is my output

答案 2 :(得分:0)

尝试在NavigationView中设置android:layout_gravity="center_horizontal"而不是android:layout_gravity="end"

答案 3 :(得分:0)

android:gravity="center"设置其使用的View内容的严重性。 android:layout_gravity在其父级中设置视图或布局的重力。

答案 4 :(得分:0)

Kotlin扩展名:

fun Menu.centerTitles() {
    for (i in 0 until size()) {
        val item = getItem(i)
        SpannableString(item.title).also {
            it.setSpan(AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0, it.length, 0)
            item.title = it
        }
    }
}

用法:

navigationViewMain!!.menu.centerTitles()

P.S。这是Heena Arora改进的答案

答案 5 :(得分:0)

使用 style="@style/MaterialAlertDialog.MaterialComponents.Title.Panel.CenterStacked" 属性作为导航视图:

<com.google.android.material.navigation.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="false"
            app:headerLayout="@layout/nav_header"
            app:menu="@menu/main_activity_navigator_items"
            android:background="@color/appbgcolor"
style="@style/MaterialAlertDialog.MaterialComponents.Title.Panel.CenterStacked"/>
相关问题