【问题标题】:Android NaviagtionDrawer Item Text AlignmentAndroid NaviagtionDrawer 项目文本对齐
【发布时间】:2017-04-19 11:59:10
【问题描述】:

我是这样创建 NavigationView

,这是我的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>   

我想这样设置Item文本对齐中心

这是我的菜单 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>

谢谢

【问题讨论】:

  • 最后我找到了一个解决方案,我创建了一个 Listview 而不是菜单并提供文本对齐,它工作正常,谢谢
  • 我在下面给出了我的解决方案,请检查一下

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


【解决方案1】:

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

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);

【讨论】:

  • 没错,这比创建ListView更好
  • 最佳答案!另外,我鼓动在与 kotlin 扩展的链接中使用这种方法。我的答案将在帖子中(下方或上方)显示。
【解决方案2】:

我创建的是 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 ,然后我对齐了我的文本重心。

这是我的最终输出

【讨论】:

    【解决方案3】:

    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()
    

    附:这是 Heena Arora 改进后的答案

    【讨论】:

      【解决方案4】:

      使用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"/>
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 嗨 Nicolas,我试过这种方式,但它对 NavigationView 的影响,而不是对项目中的文本的影响。
        【解决方案6】:

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

        【讨论】:

        • 当项目添加为菜单时,导航抽屉中不可能。示例:app:menu="@menu/navigation_items"
        猜你喜欢
        • 1970-01-01
        • 2016-11-09
        • 2011-12-26
        • 1970-01-01
        • 2016-02-02
        • 2021-05-01
        • 2011-12-17
        • 1970-01-01
        相关资源
        最近更新 更多